# Name: smd_calendar v0.52 # 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 b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuNTIiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjYyOiJDYWxlbmRhciAvIGV2ZW50IC8gc2NoZWR1bGUgc3lzdGVtIHdpdGggZXZlbnRzIGFz IFRYUCBhcnRpY2xlcyI7czo0OiJjb2RlIjtzOjgyNTQ2OiIvLyBCYXNlZCBvbiBtZHBfY2Fs ZW5kYXIgLSB0aGFua3MgTWFyc2hhbGwhDQovLyBUT0RPOiAqIGFsbG93IHRhYmxlIGhlYWRl ciB0byBiZSByZW1vdmVkIC8gcmVzdHlsZWQgY29tcGxldGVseSAodGhlIG1vbnRoL3dlZWsg ZHJvcGRvd24gJiBuYXYgaWNvbnMpDQovLyAgICAgICAgIC0tIGEgZm9ybSAobmF2Zm9ybT8p IGZvciB0aGUgaGVhZGVyIHJvdyB3aXRoIGFjY2VzcyB0byBhbGwgdmFycyBzdWNoIGFzIHdo aWNoIG1vbnRoIGlzIGJlaW5nIGRpc3BsYXllZD8NCi8vICAgICAgICAgLS0gdG9vbHMgdG8g YWxsb3cgdGhlIGhlYWRlciB0byBiZSBnZW5lcmF0ZWQgZnJvbSBjb21wb25lbnRzIGFuZCBs YWlkIG91dCBpbiBhbnkgbWFubmVyPw0KLy8gICAgICAgKiBhbGxvdyBVUkwgdmFycyB0byBi ZSBwYXNzZWQgYXMgUE9TVCAodG8gYnlwYXNzIGdicF9wZXJtbGlua3MpDQovLyAgICAgICAq IGFkZCBjdXN0b20gcm93cyB0byB0aGUgdGFibGUgKGhlYWRlciwgZm9vdGVyKSAtLSBoZWFk ZXIgY291bGQgYmUgdXNlZCB0byByZXBsYWNlIHRoZSBjdXJyZW50IG5hdi9kcm9wZG93bnMN Ci8vICAgICAgICogZGl2LWJhc2VkIGNhbGVuZGFyIGxheW91dD8NCi8vIFRPRE86IEZpeCBl eHBpcnkgZGF0ZXMgb24gZXh0cmErIGFsbHNwYW5uZWQgZGF0ZXMgaW4gc21kX2FydGljbGVf ZXZlbnQgKGFuZCBjYWxlbmRhcj8pLiBUaGV5IGN1cnJlbnRseSAnY3JlZXAnIGEgZGF5IGZv ciBldmVyeSBkYXkgb2YgYSBzcGFubmVkIGV2ZW50DQoNCmlmKCAkZGF0ZSA9IGdwcygnZGF0 ZScpICkgew0KCSRfR0VUWydtb250aCddID0gJGRhdGU7DQp9DQpmdW5jdGlvbiBzbWRfY2Fs ZW5kYXIoJGF0dHMsICR0aGluZz0nJykgew0KCWdsb2JhbCAkcHJldGV4dCwgJHRoaXNhcnRp Y2xlLCAkdmFyaWFibGUsICRwcmVmcywgJHNtZF9jYWxfZmxhZywgJHNtZF9kYXRlLCAkc21k X2NhbGluZm8sICRzbWRfY2FsX3VjbHM7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5KA0KCQkn dGltZScgICAgICAgICAgPT4gJ2FueScsDQoJCSdzaXplJyAgICAgICAgICA9PiAnbGFyZ2Un LA0KCQknZXhwaXJlZCcgICAgICAgPT4gJycsDQoJCSdjYXRlZ29yeScgICAgICA9PiAnJywN CgkJJ3N1YmNhdHMnICAgICAgID0+ICcnLA0KCQknc2VjdGlvbicgICAgICAgPT4gJycsDQoJ CSdhdXRob3InICAgICAgICA9PiAnJywNCgkJJ3JlYWxuYW1lJyAgICAgID0+ICcnLA0KCQkn c3RhdHVzJyAgICAgICAgPT4gJ2xpdmUnLA0KCQknc2hvd2FsbCcgICAgICAgPT4gJzAnLA0K CQknc3RhdGljJyAgICAgICAgPT4gJycsDQoJCSdmb3JtJyAgICAgICAgICA9PiAnJywNCgkJ J3NwYW5mb3JtJyAgICAgID0+ICdTTURfU0FNRScsDQoJCSdyZWN1cmZvcm0nICAgICA9PiAn U01EX1NBTUUnLA0KCQknY2VsbGZvcm0nICAgICAgPT4gJycsDQoJCSdoZWFkZXJmb3JtJyAg ICA9PiAnJywNCgkJJ3N0ZXBmaWVsZCcgICAgID0+ICcnLA0KCQknc2tpcGZpZWxkJyAgICAg PT4gJycsDQoJCSdvbWl0ZmllbGQnICAgICA9PiAnJywNCgkJJ2V4dHJhZmllbGQnICAgID0+ ICcnLA0KCQknZXh0cmFzdHJpY3QnICAgPT4gJzAnLA0KCQknZGF0ZWZpZWxkcycgICAgPT4g JycsDQoJCSdzaG93c2tpcHBlZCcgICA9PiAnMCcsDQoJCSdzaG93c3Bhbm5lZCcgICA9PiAn MScsDQoJCSdob2xpZGF5cycgICAgICA9PiAnJywNCgkJJ2hvbGlkYXlmbGFncycgID0+ICdz dGFuZGFyZCcsDQoJCSdjbGFzc2xldmVscycgICA9PiAnY2VsbCwgZXZlbnQnLA0KCQknbGlu a3Bvc3RlZCcgICAgPT4gJ3JlY3VyLCBtdWx0aSwgbXVsdGlwcmV2LCBtdWx0aWxhc3QnLA0K CQknY2xhc3NwcmVmaXhlcycgPT4gJ3NtZF9jYWxfLCBzbWRfY2FsX2V2XycsDQoJCSdjbGFz cycgICAgICAgICA9PiAnJywNCgkJJ3Jvd2NsYXNzJyAgICAgID0+ICcnLA0KCQknY2VsbGNs YXNzJyAgICAgPT4gJycsDQoJCSdlbXB0eWNsYXNzJyAgICA9PiAnZW1wdHknLA0KCQknaXNv d2Vla2NsYXNzJyAgPT4gJ3dlZWsnLA0KCQknbmF2Y2xhc3MnICAgICAgPT4gJ25hdnByZXYs IG5hdm5leHQnLA0KCQknbmF2YXJyb3cnICAgICAgPT4gJyYjNjA7LCAmIzYyOycsDQoJCSdu YXZpZCcgICAgICAgICA9PiAnJywNCgkJJ2V2ZW50Y2xhc3NlcycgID0+ICdjYXRlZ29yeScs DQoJCSdldmVudHdyYXB0YWcnICA9PiAnc3BhbicsDQoJCSdzZWxlY3QnICAgICAgICA9PiAn JywNCgkJJ3NlbGVjdGJ0bicgICAgID0+ICcnLA0KCQknbXljbGFzcycgICAgICAgPT4gJycs DQoJCSdteXdyYXB0YWcnICAgICA9PiAnJywNCgkJJ2NhcHRpb24nICAgICAgID0+ICcnLA0K CQknc3VtbWFyeScgICAgICAgPT4gJycsDQoJCSdpZCcgICAgICAgICAgICA9PiAnJywNCgkJ J3dlZWsnICAgICAgICAgID0+ICcnLA0KCQknbW9udGgnICAgICAgICAgPT4gJycsDQoJCSd5 ZWFyJyAgICAgICAgICA9PiAnJywNCgkJJ3JlbWFwJyAgICAgICAgID0+ICcnLA0KCQkneWVh cndpZHRoJyAgICAgPT4gJzAnLA0KCQknaXNvd2Vla3MnICAgICAgPT4gJycsDQoJCSdkYXlm b3JtYXQnICAgICA9PiAnQUJCUicsDQoJCSdtb250aGZvcm1hdCcgICA9PiAnRlVMTCcsDQoJ CSdmaXJzdGRheScgICAgICA9PiAwLA0KCQknbWFpbnRhaW4nICAgICAgPT4gJ2NhbGlkJywN CgkJJ25hbWV2YWwnICAgICAgID0+ICcnLA0KCQknZ210JyAgICAgICAgICAgPT4gMCwNCgkJ J2xhbmcnICAgICAgICAgID0+ICcnLA0KCQknZGVidWcnICAgICAgICAgPT4gMCwNCgkpLCAk YXR0cykpOw0KDQoJJHNpemUgPSAoaW5fYXJyYXkoJHNpemUsIGFycmF5KCdzbWFsbCcsICds YXJnZScpKSkgPyAkc2l6ZSA6ICdsYXJnZSc7DQoJJHN0YXR1cyA9ICgkc3RhdHVzKSA/ICRz dGF0dXMgOiAnbGl2ZSc7IC8vIGluIGNhc2Ugc3RhdHVzIGlzIGVtcHR5DQoJJGZpcnN0ZGF5 ID0gKCRpc293ZWVrcyA9PSAnJykgPyAkZmlyc3RkYXkgOiAxOw0KCSRzcGFuZm9ybSA9ICgk c3BhbmZvcm0gPT0gJ1NNRF9TQU1FJykgPyAkZm9ybSA6ICRzcGFuZm9ybTsNCgkkcmVjdXJm b3JtID0gKCRyZWN1cmZvcm0gPT0gJ1NNRF9TQU1FJykgPyAkZm9ybSA6ICRyZWN1cmZvcm07 DQoJJGNlbGxmb3JtID0gKGVtcHR5KCRjZWxsZm9ybSkpID8gJycgOiBmZXRjaF9mb3JtKCRj ZWxsZm9ybSk7DQoJJGhlYWRlcmZvcm0gPSAoZW1wdHkoJGhlYWRlcmZvcm0pKSA/ICcnIDog ZmV0Y2hfZm9ybSgkaGVhZGVyZm9ybSk7DQoJJGZyb250cGFnZSA9ICgkc2VjdGlvbj09Jycg JiYgJHByZXRleHRbJ3MnXT09J2RlZmF1bHQnKSA/IHRydWUgOiBmYWxzZTsNCg0KCS8vIFNl dCB1cCB0aGUgY2xhc3MgcHJlZml4ZXMNCgkkY2xldnMgPSBkb19saXN0KCRjbGFzc2xldmVs cyk7DQoJJGNscyA9IGRvX2xpc3QoJGNsYXNzcHJlZml4ZXMpOw0KCSRjbHNfcGZ4ID0gJGV2 Y19wZnggPSAkY2xzWzBdOw0KCWlmIChjb3VudCgkY2xzKSA+IDEpew0KCQkkZXZjX3BmeCA9 ICRjbHNbMV07DQoJfQ0KDQoJLy8gU2V0IHVwIHRoZSBuYXYgY2xhc3MoZXMpDQoJJG1haW50 YWluID0gZG9fbGlzdCgkbWFpbnRhaW4pOw0KCSRuYXZhcnJvdyA9IGRvX2xpc3QoJG5hdmFy cm93KTsNCgkkbmF2cGFyciA9ICRuYXZhcnJvd1swXTsNCgkkbmF2bmFyciA9IChjb3VudCgk bmF2YXJyb3cpID4gMSkgPyAkbmF2YXJyb3dbMV0gOiAkbmF2YXJyb3dbMF07DQoJJG5hdmNs YXNzID0gZG9fbGlzdCgkbmF2Y2xhc3MpOw0KCSRuYXZwY2xhc3MgPSAkbmF2Y2xhc3NbMF07 DQoJJG5hdm5jbGFzcyA9IChjb3VudCgkbmF2Y2xhc3MpID4gMSkgPyAkbmF2Y2xhc3NbMV0g OiAkbmF2Y2xhc3NbMF07DQoNCgkvLyBGaWx0ZXJzDQoJJGZvcHRzID0gYXJyYXkoKTsNCgkk Y2F0U1FMID0gJHNlY1NRTCA9ICRhdXRoU1FMID0gJGZwU1FMID0gJyc7DQoJaWYoJGNhdGVn b3J5KSB7DQoJCSRmb3B0c1snYyddID0gJGNhdGVnb3J5OyAvLyBUT0RPOiBDYW4gZm9wdHMg dGFrZSBhIGxpc3Q/IFNob3VsZCBpdCBpbmNsdWRlIHN1YmNhdHM/DQoJCSRhbGxjYXRzID0g ZG9fbGlzdCgkY2F0ZWdvcnkpOw0KCQkkc3ViY2F0cyA9IChlbXB0eSgkc3ViY2F0cykpID8g MCA6ICgoc3RydG9sb3dlcigkc3ViY2F0cyk9PSJhbGwiKSA/IDk5OTk5IDogaW50dmFsKCRz dWJjYXRzKSk7DQoJCWlmICgkc3ViY2F0cykgew0KCQkJJG91dGNhdHMgPSBhcnJheSgpOw0K CQkJZm9yZWFjaCAoJGFsbGNhdHMgYXMgJGNhdCkgew0KCQkJCSRjYXRzID0gZ2V0VHJlZShk b3NsYXNoKCRjYXQpLCAnYXJ0aWNsZScpOw0KCQkJCWZvcmVhY2ggKCRjYXRzIGFzICRqZHgg PT4gJHZhbCkgew0KCQkJCQlpZiAoJGNhdHNbJGpkeF1bJ2xldmVsJ10gPD0gJHN1YmNhdHMp IHsNCgkJCQkJCSRvdXRjYXRzW10gPSAkY2F0c1skamR4XVsnbmFtZSddOw0KCQkJCQl9DQoJ CQkJfQ0KCQkJfQ0KCQkJJGFsbGNhdHMgPSAkb3V0Y2F0czsNCgkJfQ0KCQkkY2F0U1FMID0g ZG9RdW90ZShqb2luKCInLCciLCBkb1NsYXNoKCRhbGxjYXRzKSkpOw0KCQkkY2F0U1FMID0g IiBBTkQgKCBDYXRlZ29yeTEgSU4gKCIuJGNhdFNRTC4iKSBPUiBDYXRlZ29yeTIgSU4gKCIu JGNhdFNRTC4iKSApICI7DQoJfQ0KCWlmKCRzZWN0aW9uKSB7DQoJCSRzZWNzID0gZG9fbGlz dCgkc2VjdGlvbik7DQoJCSRzbWRfY2FsaW5mb1sncyddID0gJHNlY3NbMF07DQoJCSRzZWNT UUwgPSBkb1F1b3RlKGpvaW4oIicsJyIsIGRvU2xhc2goJHNlY3MpKSk7DQoJCSRzZWNTUUwg PSAiIEFORCBTZWN0aW9uIElOICgiLiRzZWNTUUwuIikgIjsNCgl9DQoJaWYoJHJlYWxuYW1l KSB7DQoJCSRhdXRob3JzID0gc2FmZV9jb2x1bW4oJ25hbWUnLCAndHhwX3VzZXJzJywgJ1Jl YWxOYW1lIElOICgnLiBkb1F1b3RlKGpvaW4oIicsJyIsIGRvQXJyYXkoZG9fbGlzdCgkcmVh bG5hbWUpLCAndXJsZGVjb2RlJykpKSAuJyknICk7DQoJCSRhdXRob3IgPSBqb2luKCcsJywg JGF1dGhvcnMpOw0KCX0NCglpZigkYXV0aG9yKSB7DQoJCSRmb3B0c1snYXV0aG9yJ10gPSBo dG1sZW50aXRpZXMoZ3BzKCdhdXRob3InKSk7DQoJCSRhdXRoU1FMID0gZG9RdW90ZShqb2lu KCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJGF1dGhvcikpKSk7DQoJCSRhdXRoU1FMID0gIiBB TkQgQXV0aG9ySUQgSU4gKCIuJGF1dGhTUUwuIikgIjsNCgl9DQoJaWYgKCRmcm9udHBhZ2Ug JiYgISRzaG93YWxsKSB7DQoJCSRmcFNRTCA9IGZpbHRlckZyb250UGFnZSgpOw0KCX0NCgkk c21kX2NhbGluZm9bJ2V2aWQnXSA9IDA7DQoJJHNtZF9jYWxpbmZvWydhcnRpZCddID0gJHRo aXNhcnRpY2xlWyd0aGlzaWQnXTsNCgkkc21kX2NhbGluZm9bJ2FydGl0bGUnXSA9ICR0aGlz YXJ0aWNsZVsndXJsX3RpdGxlJ107DQoJJG5hbWV2YWwgPSBkb19saXN0KCRuYW1ldmFsKTsN Cglmb3JlYWNoICgkbmFtZXZhbCBhcyAkbnYpIHsNCgkJJG52ID0gZXhwbG9kZSgiPSIsICRu dik7DQoJCWlmICgkbnZbMF0pIHsNCgkJCSRmb3B0c1skbnZbMF1dID0gKChpc3NldCgkbnZb MV0pKSA/ICRudlsxXSA6ICcnKTsNCgkJfQ0KCX0NCgkkc3RhdHVzID0gZG9fbGlzdCgkc3Rh dHVzKTsNCgkkc3RhdGkgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRzdGF0dXMgYXMgJHN0YXQp IHsNCgkJaWYgKGVtcHR5KCRzdGF0KSkgew0KCQkJY29udGludWU7DQoJCX0gZWxzZSBpZiAo aXNfbnVtZXJpYygkc3RhdCkpIHsNCgkJCSRzdGF0aVtdID0gJHN0YXQ7DQoJCX0gZWxzZSB7 DQoJCQkkc3RhdGlbXSA9IGdldFN0YXR1c051bSgkc3RhdCk7DQoJCX0NCgl9DQoJJHN0YXRp ID0gIiBTdGF0dXMgSU4gKCIuam9pbignLCcsICRzdGF0aSkuIikiOw0KDQoJJGV4cGlyZWQg PSAoJGV4cGlyZWQpID8gJGV4cGlyZWQgOiAkcHJlZnNbJ3B1Ymxpc2hfZXhwaXJlZF9hcnRp Y2xlcyddOw0KCSRleHBpcmVkID0gKCgkZXhwaXJlZCkgPyAnJyA6ICcgQU5EIChub3coKSA8 PSBFeHBpcmVzIE9SIEV4cGlyZXMgPSAnLk5VTExEQVRFVElNRS4nKScpOw0KCSRldmVudGNs YXNzZXMgPSBkb19saXN0KCRldmVudGNsYXNzZXMpOw0KCSRob2xpZGF5ZmxhZ3MgPSBkb19s aXN0KCRob2xpZGF5ZmxhZ3MpOw0KCSRsaW5rcG9zdGVkID0gZG9fbGlzdCgkbGlua3Bvc3Rl ZCk7DQoJJGRhdGVmaWVsZHMgPSBkb19saXN0KCRkYXRlZmllbGRzKTsNCg0KCS8vIFdvcmsg b3V0IHRoZSBmaXJzdCBhbmQgbGFzdCBwb3N0cyB0byBkZXRlcm1pbmUgdGhlIHllYXIgcmFu Z2UgLSBwcm9iYWJseSBhIGJldHRlciB3YXkgb2YgZG9pbmcgdGhpcyB0aGFuIDMgcXVlcmll cw0KCSRmaWx0ID0gJHN0YXRpIC4gKCgkY2F0ZWdvcnkpID8gJGNhdFNRTCA6ICcnKSAuICgo JHNlY3Rpb24pID8gJHNlY1NRTCA6ICcnKSAuICgoJGF1dGhvcikgPyAkYXV0aFNRTCA6ICcn KSAuICRmcFNRTDsNCgkkZWFybGllc3QgPSBzYWZlX2ZpZWxkKCd1bml4X3RpbWVzdGFtcChQ b3N0ZWQpIEFTIHVQb3N0ZWQnLCAndGV4dHBhdHRlcm4nLCAkZmlsdCAuJyBPUkRFUiBCWSBQ b3N0ZWQgQVNDIExJTUlUIDAsIDEnLCAkZGVidWcpOw0KCSRscCA9IHNhZmVfZmllbGQoJ3Vu aXhfdGltZXN0YW1wKFBvc3RlZCkgQVMgdVBvc3RlZCcsICd0ZXh0cGF0dGVybicsICRmaWx0 IC4nIE9SREVSIEJZIFBvc3RlZCBERVNDIExJTUlUIDAsIDEnLCAkZGVidWcpOw0KCSRsbSA9 IHNhZmVfZmllbGQoJ3VuaXhfdGltZXN0YW1wKExhc3RNb2QpIEFTIHVMYXN0TW9kJywgJ3Rl eHRwYXR0ZXJuJywgJGZpbHQgLicgT1JERVIgQlkgTGFzdE1vZCBERVNDIExJTUlUIDAsIDEn LCAkZGVidWcpOw0KCSRsYXRlc3QgPSAoJHRpbWU9PSJwYXN0IikgPyB0aW1lKCkgOiAoKCRs cCA+ICRsbSkgPyAkbHAgOiAkbG0pOw0KDQoJJHllYXJ3aWR0aCA9IGRvX2xpc3QoJHllYXJ3 aWR0aCk7DQoJJHllYXJ3aWR0aFswXSA9IChlbXB0eSgkeWVhcndpZHRoWzBdKSkgPyAwIDog JHllYXJ3aWR0aFswXTsNCglpZiAoY291bnQoJHllYXJ3aWR0aCkgPT0gMSkgew0KCQkkeWVh cndpZHRoWzFdID0gJHllYXJ3aWR0aFswXTsNCgl9DQoJJHVzZW5vdyA9IGFycmF5KGZhbHNl LGZhbHNlKTsNCglmb3JlYWNoICgkeWVhcndpZHRoIGFzICR5cmlkeCA9PiAkeXJpdGVtKSB7 DQoJCWlmIChzdHJwb3MoJHlyaXRlbSwiYyIpICE9PSBmYWxzZSkgew0KCQkJJHllYXJ3aWR0 aFskeXJpZHhdID0gaW50dmFsKCR5cml0ZW0pOw0KCQkJJHVzZW5vd1skeXJpZHhdID0gdHJ1 ZTsNCgkJfQ0KCX0NCg0KCS8vIFJlbWFwIHcvbS95IHRvIG90aGVyIHZhcnMgaWYgcmVxdWly ZWQNCgkkcmVtYXAgPSBkb19saXN0KCRyZW1hcCk7DQoJJGRtYXAgPSBhcnJheSgieSIgPT4g InkiLCAibSIgPT4gIm0iLCAidyIgPT4gInciKTsNCglmb3JlYWNoICgkcmVtYXAgYXMgJGRw YWlyKSB7DQoJCSRkcGFpciA9IGRvX2xpc3QoJGRwYWlyLCAnOicpOw0KCQkkZG1hcFskZHBh aXJbMF1dID0gKGlzc2V0KCRkcGFpclsxXSkpID8gJGRwYWlyWzFdIDogJGRwYWlyWzBdOw0K CX0NCgkkZWFybGllc3QgPSBkYXRlKCJZIiwgc3RydG90aW1lKCItIi4keWVhcndpZHRoWzBd LiIgeWVhciIsICggKGVtcHR5KCRlYXJsaWVzdCkgfHwgJHVzZW5vd1swXT09dHJ1ZSkgPyB0 aW1lKCkgOiAkZWFybGllc3QpICkgKTsNCgkkbGF0ZXN0ID0gZGF0ZSgiWSIsIHN0cnRvdGlt ZSgiKyIuJHllYXJ3aWR0aFsxXS4iIHllYXIiLCAoIChlbXB0eSgkbGF0ZXN0KSB8fCAkdXNl bm93WzFdPT10cnVlKSA/IHRpbWUoKSA6ICRsYXRlc3QpICkgKTsNCg0KCS8vIENoZWNrIHRo ZSBVUkwgZm9yIGN1cnJlbnQgZGF0ZSBhbmQgY2FsZW5kYXIgdGFyZ2V0IGluZm8NCgkkaW5f Y2FsaWQgPSBncHMoJ2NhbGlkJyk7DQoJJGluX3llYXIgPSAoZ3BzKCRkbWFwWyJ5Il0pIGFu ZCBpc19udW1lcmljKGdwcygkZG1hcFsieSJdKSkpID8gKGludClncHMoJGRtYXBbInkiXSkg OiAnJzsNCgkkaW5fbW9udGggPSAoZ3BzKCRkbWFwWyJtIl0pIGFuZCBpc19udW1lcmljKGdw cygkZG1hcFsibSJdKSkpID8gKGludClncHMoJGRtYXBbIm0iXSkgOiAnJzsNCgkkaW5fd2Vl ayA9IChncHMoJGRtYXBbInciXSkgYW5kIGlzX251bWVyaWMoZ3BzKCRkbWFwWyJ3Il0pKSkg PyAoaW50KWdwcygkZG1hcFsidyJdKSA6ICcnOw0KDQoJaWYoJHN0YXRpYykgeyAvLyBpZiB3 ZSdyZSBzdGF0aWMgdy9vIGFueSBzdXBwbGllZCB2YXJzLCB1c2UgdGhlIGN1cnJlbnQgZGF0 ZQ0KCQlpZighJHllYXIpIHsgJHllYXIgPSBzYWZlX3N0cmZ0aW1lKCclWScpOyB9DQoJCWlm KCEkbW9udGgpIHsgJG1vbnRoID0gc2FmZV9zdHJmdGltZSgnJW0nKTsgfQ0KCX0gZWxzZSB7 IC8vIG90aGVyd2lzZSB1c2UgY3VycmVudCBkYXRlIG9ubHkgaWYgdGhlcmUncyBub3RoaW5n IGVsc2UNCgkJaWYoICRpZCA9PSAkaW5fY2FsaWQgKSB7IC8vIHVzZSBpbmNvbWluZw0KCQkJ JHllYXIgPSAoJGluX3llYXIpID8gJGluX3llYXIgOiAoKCR5ZWFyKSA/ICR5ZWFyIDogc2Fm ZV9zdHJmdGltZSgnJVknKSk7DQoJCQkkbW9udGggPSAoJGluX21vbnRoKSA/ICRpbl9tb250 aCA6ICgoJG1vbnRoKSA/ICRtb250aCA6IHNhZmVfc3RyZnRpbWUoJyVtJykpOw0KCQkJLy8g SWYgd2VlayBpcyB1c2VkLCBhZGp1c3QgbW9udGggc28gaXQgZW5jb21wYXNzZXMgdGhlIGdp dmVuIHdlZWsNCgkJCSR3ZWVrID0gJGluX3dlZWs7DQoJCQlpZiAoJHdlZWspIHsNCgkJCQkk bW9udGggPSBzYWZlX3N0cmZ0aW1lKCIlbSIsIHN0cnRvdGltZSgkeWVhci4iVyIuc3RyX3Bh ZCgkd2VlaywgMiwgJzAnLCBTVFJfUEFEX0xFRlQpKSk7IC8vIEdldCB0aGUgbW9udGggZnJv bSB0aGUgd2Vlaw0KCQkJfQ0KCQl9IGVsc2UgeyAvLyB1c2UgY3VycmVudA0KCQkJaWYoISR5 ZWFyKSB7ICR5ZWFyID0gc2FmZV9zdHJmdGltZSgnJVknKTsgfQ0KCQkJaWYoISRtb250aCkg eyAkbW9udGggPSBzYWZlX3N0cmZ0aW1lKCclbScpOyB9DQoJCQlpZigkd2VlaykgeyAkbW9u dGggPSBzYWZlX3N0cmZ0aW1lKCIlbSIsIHN0cnRvdGltZSgkeWVhci4iVyIuc3RyX3BhZCgk d2VlaywgMiwgJzAnLCBTVFJfUEFEX0xFRlQpKSk7IH0NCgkJfQ0KCX0NCgkkc21kX2NhbGlu Zm9bJ2lkJ10gPSAoJGluX2NhbGlkKSA/ICRpbl9jYWxpZCA6ICRpZDsNCgkkc21kX2RhdGVb J3knXSA9ICR5ZWFyOyAkc21kX2RhdGVbJ20nXSA9ICRtb250aDsgLy8gJHdlZWsvZGF5L2lz b3llYXIgYXJlIHNldCBwZXIgZXZlbnQgbGF0ZXINCg0KCSR0c19maXJzdCA9IG1rdGltZSgw LCAwLCAwLCAkbW9udGgsIDEsICR5ZWFyKTsNCgkkdHNfbGFzdCA9IG1rdGltZSgyMywgNTks IDU5LCAkbW9udGgsIGRhdGUoJ3QnLCR0c19maXJzdCksICR5ZWFyKTsNCgkkdHNfbGFzdG9m ZiA9ICR0c19sYXN0IC0gdHpfb2Zmc2V0KCR0c19sYXN0KTsNCglpZiAoJGRlYnVnKSB7DQoJ CWVjaG8gIisrIFRISVMgTU9OVEgnUyBDQUxFTkRBUiBbIHN0YXJ0IHN0YW1wIC8vIGVuZCBk YXRlIC8vIGVuZCBzdGFtcCAvLyBlbmQgZGF0ZSAvLyB0eiBvZmZzZXQgKGVuZCkgXSArKyI7 DQoJCWRtcCgkdHNfZmlyc3QsIGRhdGUoJ1ktbS1kIEg6aTpzJywgJHRzX2ZpcnN0KSwgJHRz X2xhc3QsIGRhdGUoJ1ktbS1kIEg6aTpzJywgJHRzX2xhc3QpLCAkdHNfbGFzdG9mZik7DQoJ fQ0KCSRleHRyYXNxbCA9ICRjYXRTUUwgLiAkc2VjU1FMIC4gJGF1dGhTUUwgLiAkZnBTUUw7 DQoNCglzd2l0Y2goJHRpbWUpIHsNCgkJY2FzZSAiYW55IiA6IGJyZWFrOw0KCQljYXNlICJm dXR1cmUiIDogJGV4dHJhc3FsIC49ICIgQU5EIFBvc3RlZCA+IG5vdygpIjsgYnJlYWs7DQoJ CWRlZmF1bHQgOiAkZXh0cmFzcWwgLj0gIiBBTkQgUG9zdGVkIDwgbm93KCkiOyBicmVhazsg Ly8gVGhlIHBhc3QNCgl9DQoNCgkvLyBIb2xpZGF5cyBhcmUgZ2xvYmFsICdleGNsdXNpb25z JywgZWl0aGVyIGRlZmluZWQgZGlyZWN0bHkgb3IgaW4gYSB0eHA6dmFyaWFibGUNCgkkaG9s aWRheXMgPSBkb19saXN0KCRob2xpZGF5cyk7DQoJJHR4cGhvbHMgPSBkb19saXN0KCRob2xp ZGF5c1swXSwgIjoiKTsNCglpZiAoJHR4cGhvbHNbMF0gPT0gInR4cHZhciIpIHsNCgkJJGhv bGlkYXlzID0gZG9fbGlzdCgkdmFyaWFibGVbJHR4cGhvbHNbMV1dKTsNCgl9DQoJLy8gRm9y Y2UgZWFjaCBob2xpZGF5IHRvIGEga25vd24gZm9ybWF0LiBIb2xpZGF5cyB3aXRob3V0IHll YXJzIHVzZSBjdXJyZW50IHllYXINCglmb3JlYWNoICgkaG9saWRheXMgYXMgJGtleSA9PiAk dmFsKSB7DQoJCWlmIChlbXB0eSgkdmFsKSkgY29udGludWU7DQoJCSRudW1wYXJ0cyA9IHBy ZWdfbWF0Y2goJy9eKFtcZFx3XSspLj8oW1xkXHddKykuPyhbXGRcd10rKT8kLycsICR2YWws ICRwYXJ0cyk7DQoNCgkJaWYgKCRudW1wYXJ0cykgew0KCQkJaWYgKGNvdW50KCRwYXJ0cykg PT0gMykgew0KCQkJCSRwYXJ0c1szXSA9ICR5ZWFyOw0KICAgICAgICAgfQ0KCQkJJHZhbCA9 IHN0cl9wYWQoJHBhcnRzWzFdLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuJy0nLnN0cl9wYWQo JHBhcnRzWzJdLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuJy0nLiRwYXJ0c1szXTsNCgkJfQ0K CQkkaG9saWRheXNbJGtleV0gPSBkYXRlKCJkLU0tWSIsIHNhZmVfc3RydG90aW1lKCR2YWwp KTsNCgl9DQoNCglpZiAoJGRlYnVnID4gMCAmJiAhZW1wdHkoJGhvbGlkYXlzKSAmJiAkaG9s aWRheXNbMF0gIT0gJycpIHsNCgkJZWNobyAiKysgSE9MSURBWVMgKysgIjsNCgkJZG1wKCRo b2xpZGF5cyk7DQoJfQ0KDQoJLy8gR2V0IGFsbCBtYXRjaGluZyBhcnRpY2xlcyBpbiAoYW5k IGJlZm9yZSkgdGhpcyBtb250aA0KCSRldmVudHMgPSBhcnJheSgpOw0KCSR1cG9zdGVkX2Zp ZWxkID0gKGVtcHR5KCRkYXRlZmllbGRzWzBdKSkgPyAndVBvc3RlZCcgOiAiVU5JWF9USU1F U1RBTVAoJGRhdGVmaWVsZHNbMF0pIjsNCgkkc3FsMiA9ICRzdGF0aSAuICIgSEFWSU5HICR1 cG9zdGVkX2ZpZWxkIDw9ICIuJHRzX2xhc3RvZmYuICRleHBpcmVkIC4gJGV4dHJhc3FsIC4i IE9SREVSIEJZIFBvc3RlZCBBU0MiOw0KCSRncmFiQ29scyA9ICcqLCB1bml4X3RpbWVzdGFt cChQb3N0ZWQpIGFzIHVQb3N0ZWQsIHVuaXhfdGltZXN0YW1wKExhc3RNb2QpIGFzIHVMYXN0 TW9kLCB1bml4X3RpbWVzdGFtcChFeHBpcmVzKSBhcyB1RXhwaXJlcyc7DQoJJGV2bGlzdCA9 IHNhZmVfcm93cygkZ3JhYkNvbHMsICd0ZXh0cGF0dGVybicsICRzcWwyLCAkZGVidWcpOw0K CWFydGljbGVfcHVzaCgpOw0KDQoJLy8gSWYgYW55IGV2ZW50cyByZWN1ciBhbmQgZmFsbCB3 aXRoaW4gdGhlIGN1cnJlbnQgbW9udGgsIGFkZCB0aG9zZSBhcyB3ZWxsDQoJLy8gSWYgYW55 IGRhdGVzIGFyZSB0byBiZSBleGNsdWRlZCwgdGhlIGVudHJ5IGlzIHNraXBwZWQgVU5MRVNT IHNob3dza2lwcGVkIGluZGljYXRlcyBvdGhlcndpc2UNCglmb3JlYWNoICgkZXZsaXN0IGFz ICRyb3cpIHsNCgkJJGlkeCA9IDA7IC8vIEluIGNhc2UgdGhlIDFzdCBkYXkgb2YgdGhlIG1v bnRoIGlzIGEgY29udGludWF0aW9uIG9mIGFuIGV2ZW50IGZyb20gdGhlIGVuZCBvZiB0aGUg cHJldmlvdXMgbW9udGgNCgkJJHN0YXJ0ID0gKCFlbXB0eSgkZGF0ZWZpZWxkc1swXSkgJiYg IWVtcHR5KCRyb3dbJGRhdGVmaWVsZHNbMF1dKSAmJiAoJHN0ZHQgPSBzdHJ0b3RpbWUoJHJv d1skZGF0ZWZpZWxkc1swXV0pKSAhPT0gZmFsc2UpID8gJHN0ZHQgOiAkcm93Wyd1UG9zdGVk J10gKyB0el9vZmZzZXQoJHJvd1sndVBvc3RlZCddKTsNCgkJJHN0YXJ0X2RhdGUgPSBkYXRl KCJZLW0tZCIsICRzdGFydCk7IC8vIEZvciByZWN1cnJpbmcvc3Bhbm5lZCBldmVudHMgb24g YSBtaW5pY2FsLCB0aGlzIGlzIHRoZSBldmVudCB0aGUgY2VsbCBsaW5rcyB0bw0KCQkkcmVh bF9lbmQgPSAoaXNzZXQoJGRhdGVmaWVsZHNbMV0pICYmICFlbXB0eSgkcm93WyRkYXRlZmll bGRzWzFdXSkgJiYgKCRlbmR0ID0gc3RydG90aW1lKCRyb3dbJGRhdGVmaWVsZHNbMV1dKSkg IT09IGZhbHNlKSA/ICRlbmR0IDogKCgkcm93Wyd1RXhwaXJlcyddPT0wKSA/IDAgOiAkcm93 Wyd1RXhwaXJlcyddICsgdHpfb2Zmc2V0KCRyb3dbJ3VFeHBpcmVzJ10pKTsNCg0KCQkvLyBJ ZiBlbmQgPCBzdGFydCB0aGUgdXNlci1zcGVjaWZpZWQgZGF0ZXMgY2Fubm90IGJlIHRydXN0 ZWQNCgkJaWYgKCRyZWFsX2VuZCAhPSAwICYmICRyZWFsX2VuZCA8PSAkc3RhcnQpIHsNCgkJ CSRzdGFydCA9ICRyb3dbJ3VQb3N0ZWQnXSArIHR6X29mZnNldCgkcm93Wyd1UG9zdGVkJ10p Ow0KCQkJJHJlYWxfZW5kID0gJHJvd1sndUV4cGlyZXMnXSArIHR6X29mZnNldCgkcm93Wyd1 RXhwaXJlcyddKTsNCgkJCXRyaWdnZXJfZXJyb3IoJ0V4cGlyeSBjYW5ub3QgYmUgYmVmb3Jl IHN0YXJ0IGRhdGUgaW4gIicuJHJvd1snVGl0bGUnXS4nIjogaWdub3JlZCcsIEVfVVNFUl9X QVJOSU5HKTsNCgkJfQ0KDQoJCSRlbmQgPSAoJHJlYWxfZW5kICE9IDAgJiYgJHJlYWxfZW5k IDwgJHRzX2xhc3QpID8gJHJlYWxfZW5kIDogJHRzX2xhc3Q7DQoJCSRyZWFsX2RpZmYgPSAo JHJlYWxfZW5kPT0wKSA/IDAgOiAkcmVhbF9lbmQgLSAkc3RhcnQ7DQoJCSRmYWtlX2RpZmYg PSBzdHJ0b3RpbWUoZGF0ZSgiWS1NLWQiLCAkcmVhbF9lbmQpIC4gIiAyMzo1OTo1OSIpOw0K CQkkZGlmZiA9ICgkcmVhbF9lbmQ9PTApID8gMCA6ICRmYWtlX2RpZmYgLSAkc3RhcnQ7DQoJ CSRzbWRfY2FsX2ZsYWcgPSAkc21kX2NhbF91Y2xzID0gYXJyYXkoKTsNCg0KCQkkZXZfbW9u dGggPSBkYXRlKCdtJywgJHN0YXJ0KTsNCgkJJGV2X3llYXIgPSBkYXRlKCdZJywgJHN0YXJ0 KTsNCgkJJGV2X2hyID0gZGF0ZSgnSCcsICRzdGFydCk7DQoJCSRldl9tbiA9IGRhdGUoJ2kn LCAkc3RhcnQpOw0KCQkkZXZfc2MgPSBkYXRlKCdzJywgJHN0YXJ0KTsNCg0KCQlpZiAoJGRl YnVnID4gMSkgew0KCQkJZWNobyAnKysgRVZFTlQgU1RBUlQgLy8gRU5EIC8vIChpZiBub24t emVybykgUkVBTCBFTkQgKysnOw0KCQkJZG1wKGRhdGUoJ2QtTS1ZIEg6aTpzJywgJHN0YXJ0 KSAuJyAvLyAnLiBkYXRlKCdkLU0tWSBIOmk6cycsICRlbmQpIC4nIC8vICcuICggKCRyZWFs X2VuZCA9PSAwKSA/ICcnIDogZGF0ZSgnZC1NLVkgSDppOnMnLCAkcmVhbF9lbmQpICkpOw0K CQkJZG1wKCRyb3dbJ1RpdGxlJ10pOw0KCQkJaWYgKCRkZWJ1ZyA+IDIpIHsNCgkJCQlkbXAo JHJvdyk7DQoJCQl9DQoJCX0NCg0KCQkkbXVsdGkgPSAoKCRlbmQgPiAkc3RhcnQpICYmICgk cmVhbF9lbmQgPiAkc3RhcnQpICYmICgkcmVhbF9lbmQgPiAkdHNfZmlyc3QpICYmIChkYXRl KCJkLW0tWSIsICRyZWFsX2VuZCkgIT0gZGF0ZSgiZC1tLVkiLCAkc3RhcnQpKSkgPyB0cnVl IDogZmFsc2U7DQoJCSRyZWN1ciA9IChlbXB0eSgkcm93WyRzdGVwZmllbGRdKSkgPyBmYWxz ZSA6IHRydWU7DQoJCSRob2xfaGl0ID0gaW5fYXJyYXkoZGF0ZSgiZC1NLVkiLCAkc3RhcnQp LCAkaG9saWRheXMpOw0KCQkkZXZjbGFzc2VzID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJGV2 ZW50Y2xhc3NlcyBhcyAkZXZjbHMpIHsNCgkJCXN3aXRjaCAoJGV2Y2xzKSB7DQoJCQkJY2Fz ZSAiIjoNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiZ2NhdCI6DQoJCQkJCWlmIChpc3NldCgk cHJldGV4dFsnYyddKSAmJiAhZW1wdHkoJHByZXRleHRbJ2MnXSkpIHsNCgkJCQkJCSRldmNs YXNzZXNbXSA9ICRldmNfcGZ4LiRwcmV0ZXh0WydjJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7 DQoJCQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCQlpZiAoaXNzZXQoJHJvd1snQ2F0ZWdvcnkx J10pICYmICFlbXB0eSgkcm93WydDYXRlZ29yeTEnXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNb XSA9ICRldmNfcGZ4LiRyb3dbJ0NhdGVnb3J5MSddOw0KCQkJCQl9DQoJCQkJCWlmIChpc3Nl dCgkcm93WydDYXRlZ29yeTInXSkgJiYgIWVtcHR5KCRyb3dbJ0NhdGVnb3J5MiddKSkgew0K CQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHJvd1snQ2F0ZWdvcnkyJ107DQoJCQkJ CX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAic2VjdGlvbiI6DQoJCQkJCWlmIChpc3NldCgk cHJldGV4dFsncyddKSAmJiAhZW1wdHkoJHByZXRleHRbJ3MnXSkpIHsNCgkJCQkJCSRldmNs YXNzZXNbXSA9ICRldmNfcGZ4LiRwcmV0ZXh0WydzJ107DQoJCQkJCX0NCgkJCQkJYnJlYWs7 DQoJCQkJY2FzZSAiYXV0aG9yIjoNCgkJCQkJaWYgKGlzc2V0KCRwcmV0ZXh0WydhdXRob3In XSkgJiYgIWVtcHR5KCRwcmV0ZXh0WydhdXRob3InXSkpIHsNCgkJCQkJCSRldmNsYXNzZXNb XSA9ICRldmNfcGZ4LiRwcmV0ZXh0WydhdXRob3InXTsNCgkJCQkJfQ0KCQkJCQlicmVhazsN CgkJCQlkZWZhdWx0Og0KCQkJCQlpZiAoaXNzZXQoJHJvd1skZXZjbHNdKSAmJiAhZW1wdHko JHJvd1skZXZjbHNdKSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y19wZnguJHJvd1sk ZXZjbHNdOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCSRpZ25vcmUgPSAk b21pdCA9ICRjZmxhZyA9IGFycmF5KCk7DQoNCgkJaWYgKCRkZWJ1ZyA+IDEgJiYgJGV2Y2xh c3Nlcykgew0KCQkJZWNobyAnKysgRVZFTlQgQ0xBU1NFUyArKyc7DQoJCQlkbXAoJGV2Y2xh c3Nlcyk7DQoJCX0NCg0KCQkvLyBFdmVudHMgdGhhdCBzdGFydCBvciBhcmUgYWRkZWQgdGhp cyBtb250aA0KCQlpZiAoKCRzdGFydCA8ICRlbmQpICYmICgkc3RhcnQgPiAkdHNfZmlyc3Qp KSB7DQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJJHNtZF9jYWxpbmZvWydl dmlkJ10gPSAkcm93WydJRCddOw0KCQkJLy8gYSBzdGFuZGFyZCBldmVudCBvciBzdGFydCBv ZiBhIG11bHRpDQoJCQlpZiAoJHNob3dzcGFubmVkICYmICRtdWx0aSAmJiAhJHJlY3VyKSB7 DQoJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ211bHRpZmlyc3QnOw0KCQkJfQ0KCQkJaWYgKCRy ZWN1cikgew0KCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdyZWN1cmZpcnN0JzsNCgkJCX0NCgkJ CWlmICghJHNtZF9jYWxfZmxhZykgew0KCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdzdGFuZGFy ZCc7DQoJCQl9DQoJCQlpZiAoICggJGhvbF9oaXQgJiYgIWluX2FycmF5KCdtdWx0aScsJGhv bGlkYXlmbGFncykgJiYgaW5fYXJyYXkoJ211bHRpZmlyc3QnLCRzbWRfY2FsX2ZsYWcpICkg fHwgKCAkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ3N0YW5kYXJkJywkaG9saWRheWZsYWdzKSAm JiBpbl9hcnJheSgnc3RhbmRhcmQnLCRzbWRfY2FsX2ZsYWcpICkgKSB7DQoJCQkJJHNtZF9j YWxfZmxhZ1tdID0gJ2NhbmNlbCc7DQoJCQl9DQoJCQlmb3JlYWNoICgkc21kX2NhbF9mbGFn IGFzICRpdGVtKSB7DQoJCQkJJGNmbGFnW10gPSAkY2xzX3BmeC4kaXRlbTsNCgkJCX0NCg0K CQkJJGlkeCA9ICRzbWRfZGF0ZVsnZCddID0gKGludClzdHJmdGltZSgnJWQnLCAkc3RhcnQp Ow0KCQkJJHNtZF9kYXRlWyd3J10gPSBzdHJmdGltZShzbWRfY2FsX3JlZm9ybWF0X3dpbign JVYnLCAkc3RhcnQpLCAkc3RhcnQpOw0KCQkJJHNtZF9kYXRlWydpeSddID0gc3RyZnRpbWUo c21kX2NhbF9yZWZvcm1hdF93aW4oJyVHJywgJHN0YXJ0KSwgJHN0YXJ0KTsNCgkJCSR1c2Vf cG9zdGVkID0gaW5fYXJyYXkoJ3N0YW5kYXJkJywgJGxpbmtwb3N0ZWQpOw0KDQoJCQkkb3Ag PSAoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZv cm0pIDogKCgkc2l6ZT09InNtYWxsIikgPyBzbWRfY2FsX21pbmlsaW5rKCRyb3csICRpZHgs ICRtb250aCwgJHllYXIsICR1c2VfcG9zdGVkKSA6IGhyZWYoJHJvd1snVGl0bGUnXSwgcGVy bWxpbmt1cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1snVGl0bGUnXS4nIicpKSApOw0KCQkJ JGV2ZW50c1skaWR4XVtdID0gYXJyYXkoJ2V2JyA9PiAkb3AsICdmbGFnJyA9PiAkc21kX2Nh bF9mbGFnLCAnY2xhc3NlcycgPT4gYXJyYXlfbWVyZ2UoJGNmbGFnLCAkc21kX2NhbF91Y2xz LCAkZXZjbGFzc2VzKSwgJ3Bvc3RlZCcgPT4gJHN0YXJ0X2RhdGUpOw0KCQkJJHNtZF9jYWxf ZmxhZyA9ICRjZmxhZyA9ICRzbWRfY2FsX3VjbHMgPSBhcnJheSgpOw0KCQkJJHVzZV9wb3N0 ZWQgPSAnJzsNCgkJfQ0KDQoJCS8vIEdlbmVyYXRlIGEgc2tpcCBhcnJheSBmb3IgdGhpcyBl dmVudA0KCQlpZiAoJHNraXBmaWVsZCAmJiAkcm93WyRza2lwZmllbGRdICE9ICcnKSB7DQoJ CQkkaWdub3JlcyA9IGRvX2xpc3QoJHJvd1skc2tpcGZpZWxkXSk7DQoJCQlmb3JlYWNoICgk aWdub3JlcyBhcyAkdmFsKSB7DQoJCQkJJGlncm5nID0gc21kX2V4cGFuZF9kYXRlcmFuZ2Uo JHZhbCwgJHN0YXJ0LCAkZW5kKTsNCgkJCQlmb3JlYWNoICgkaWdybmcgYXMgJHRoZXZhbCkg ew0KCQkJCQkkaWdub3JlW10gPSBkYXRlKCJkLU0tWSIsICR0aGV2YWwpOyAvLyBGb3JjZSBl YWNoIGRhdGUgdG8gYSBrbm93biBmb3JtYXQNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gR2Vu ZXJhdGUgYW4gb21pdCBhcnJheSBmb3IgdGhpcyBldmVudA0KCQlpZiAoJG9taXRmaWVsZCAm JiAkcm93WyRvbWl0ZmllbGRdICE9ICcnKSB7DQoJCQkkb21pdHMgPSBkb19saXN0KCRyb3db JG9taXRmaWVsZF0pOw0KCQkJZm9yZWFjaCAoJG9taXRzIGFzICR2YWwpIHsNCgkJCQkkb21y bmcgPSBzbWRfZXhwYW5kX2RhdGVyYW5nZSgkdmFsLCAkc3RhcnQsICRlbmQpOw0KCQkJCWZv cmVhY2ggKCRvbXJuZyBhcyAkdGhldmFsKSB7DQoJCQkJCSRvbWl0W10gPSBkYXRlKCJkLU0t WSIsICR0aGV2YWwpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAoJGRlYnVnID4gMSAmJiAo JGlnbm9yZSB8fCAkb21pdCkpIHsNCgkJCWVjaG8gJysrIE9NSVRURUQgREFURVMgKysnOw0K CQkJZG1wKCRvbWl0KTsNCgkJCWVjaG8gJysrIENBTkNFTExFRCBEQVRFUyArKyc7DQoJCQlk bXAoJGlnbm9yZSk7DQoJCX0NCgkJLy8gQ2FsY3VsYXRlIHRoZSBkYXRlIG9mZnNldHMgYW5k IGNoZWNrIHJlY3VycmluZyBldmVudHMgdGhhdCBmYWxsIHdpdGhpbiB0aGUgbW9udGggb2Yg aW50ZXJlc3QNCgkJaWYgKCRzdGVwZmllbGQgJiYgJHJvd1skc3RlcGZpZWxkXSAhPSAnJykg ew0KCQkJJGZyZXEgPSBkb19saXN0KCRyb3dbJHN0ZXBmaWVsZF0pOw0KCQkJJHN0YW1wb2Zm ID0gKGludCkoMzYwMCokZXZfaHIpICsgKGludCkoNjAqJGV2X21uKSArIChpbnQpJGV2X3Nj Ow0KCQkJZm9yZWFjaCAoJGZyZXEgYXMgJGludGVydmFsKSB7DQoJCQkJJG1heF9sb29wID0g OTk5OTk7IC8vIFl1aywgYnV0IHByYWN0aWNhbGx5IGxpbWl0bGVzcw0KCQkJCSRvcmlnZXJ2 YWwgPSAkaW50ZXJ2YWw7DQoJCQkJJGludGVydmFsID0gc3RyX3JlcGxhY2UoIj9tb250aCIs IGRhdGUoJ0YnLCBta3RpbWUoMCwwLDAsJG1vbnRoLDEpKSwgJGludGVydmFsKTsNCgkJCQkk aW50ZXJ2YWwgPSBzdHJfcmVwbGFjZSgiP3llYXIiLCAkeWVhciwgJGludGVydmFsKTsNCgkJ CQlpZiAoc3RycG9zKCRpbnRlcnZhbCwgImxhc3QiKSA9PT0gMCkgew0KCQkJCQkkaW50ZXJ2 YWwgPSBkYXRlKCJsLCBGIGpTIFkiLCBzdHJ0b3RpbWUoICRpbnRlcnZhbCwgbWt0aW1lKDEy LCAwLCAwLCBkYXRlKCJuIiwgbWt0aW1lKDAsMCwwLCRtb250aCwxLCR5ZWFyKSkrMSwgMSwg JHllYXIpICkpOw0KCQkJCQkkbWF4X2xvb3AgPSAxOw0KCQkJCX0gZWxzZSBpZiAoc3RycG9z KCRpbnRlcnZhbCwgImZpcnN0IikgPT09IDApIHsNCgkJCQkJJGludGVydmFsID0gZGF0ZSgi bCwgRiBqUyBZIiwgc3RydG90aW1lKCAkaW50ZXJ2YWwsIG1rdGltZSgxMiwgMCwgMCwgKCgk bW9udGg+MSkgPyAkbW9udGgtMSA6IDEyKSwgZGF0ZSgidCIsIG1rdGltZSgwLDAsMCwkbW9u dGgtMSwxLCgoJG1vbnRoPT0xKSA/ICR5ZWFyLTE6ICR5ZWFyKSkpLCAoKCRtb250aD09MSkg PyAkeWVhci0xOiAkeWVhcikpICkpOw0KCQkJCQkkbWF4X2xvb3AgPSAxOw0KCQkJCX0gZWxz ZSBpZiAoc3RycG9zKCRpbnRlcnZhbCwgInRoaXMiKSA9PT0gMCkgew0KCQkJCQkkbWF4X2xv b3AgPSAxOw0KCQkJCX0NCgkJCQkkdHNfbG9vcCA9IDA7DQoJCQkJJHRzX2N1cnIgPSAkc3Rh cnQ7DQoJCQkJaWYgKHN0cnBvcygkb3JpZ2VydmFsLCAiP21vbnRoIikgfHwgc3RycG9zKCRv cmlnZXJ2YWwsICI/eWVhciIpKSB7DQoJCQkJCSRtYXhfbG9vcCA9IDE7DQogICAgICAgICAg ICB9DQoNCgkJCQl3aGlsZSAoJHRzX2N1cnIgPCAkZW5kICYmICR0c19sb29wIDwgJG1heF9s b29wKSB7DQoJCQkJCWlmICgkbWF4X2xvb3AgPT0gMSkgew0KCQkJCQkJJHRzX2N1cnIgPSBz dHJ0b3RpbWUoJGludGVydmFsKTsNCgkJCQkJCSR0c19jdXJyID0gKCR0c19jdXJyIDwgJHN0 YXJ0IHx8ICR0c19jdXJyID4gJGVuZCkgPyAkc3RhcnQgOiAkdHNfY3VycjsNCgkJCQkJfSBl bHNlIHsNCgkJCQkJCSR0c19jdXJyID0gc3RydG90aW1lKCRpbnRlcnZhbCwgJHRzX2N1cnIp Ow0KCQkJCQl9DQoJCQkJCWlmICgkdHNfY3VyciA9PT0gZmFsc2UpIHsNCgkJCQkJCSR0c19s b29wKys7DQoJCQkJCQlicmVhazsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCWlmICgkZGVidWcg PiAxKSB7DQoJCQkJCQkJZG1wKCJJTlRFUlZBTDogIi4gZGF0ZSgnZC1NLVkgSDppOnMnLCAk dHNfY3Vyciskc3RhbXBvZmYpKTsNCgkJCQkJCX0NCgkJCQkJCWlmICgkdHNfY3VyciA8ICRl bmQgJiYgJHRzX2N1cnIgPj0gJHRzX2ZpcnN0ICYmICR0c19jdXJyICE9ICRzdGFydCkgew0K CQkJCQkJCS8vIEEgcmVjdXJyaW5nIGV2ZW50LiBDaGVjayBpdCBpc24ndCBhIGhvbGlkYXkg b3IgdG8gYmUgaWdub3JlZA0KCQkJCQkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJvdyk7DQoJ CQkJCQkJJG9wID0gJyc7DQoJCQkJCQkJJGlkeCA9IChpbnQpc3RyZnRpbWUoJyVkJywgJHRz X2N1cnIpOw0KCQkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdyZWN1cic7DQoJCQkJCQkJJHRo aXNkYXRlID0gZGF0ZSgiZC1NLVkiLCAkdHNfY3Vycik7DQoJCQkJCQkJJG9taXRfbWUgPSBp bl9hcnJheSgkdGhpc2RhdGUsICRvbWl0KTsNCgkJCQkJCQkkc2hvd19tZSA9ICFpbl9hcnJh eSgkdGhpc2RhdGUsICRpZ25vcmUpOw0KCQkJCQkJCSRob2xfaGl0ID0gaW5fYXJyYXkoJHRo aXNkYXRlLCAkaG9saWRheXMpOw0KCQkJCQkJCSRzaG93X2hvbCA9ICgkaG9sX2hpdCAmJiAh aW5fYXJyYXkoJ3JlY3VyJywkaG9saWRheWZsYWdzKSApID8gZmFsc2UgOiB0cnVlOw0KCQkJ CQkJCSR1c2VfcG9zdGVkID0gc21kX2NhbF9pbl9hcnJheShhcnJheSgncmVjdXInLCAncmVj dXJmaXJzdCcpLCAkbGlua3Bvc3RlZCk7DQoNCgkJCQkJCQlpZiAoICRvbWl0X21lICkgew0K CQkJCQkJCQkkc21kX2NhbF9mbGFnW10gPSAnb21pdCc7DQoJCQkJCQkJfQ0KCQkJCQkJCWlm ICggKCEkc2hvd19tZSB8fCAhJHNob3dfaG9sKSAmJiAhJG9taXRfbWUgKSB7DQoJCQkJCQkJ CSRzbWRfY2FsX2ZsYWdbXSA9ICdjYW5jZWwnOw0KCQkJCQkJCX0NCgkJCQkJCQlmb3JlYWNo ICgkc21kX2NhbF9mbGFnIGFzICRpdGVtKSB7DQoJCQkJCQkJCSRjZmxhZ1tdID0gJGNsc19w ZnguJGl0ZW07DQoJCQkJCQkJfQ0KDQoJCQkJCQkJLy8gQ3JlYXRlIHRoZSBldmVudHMgdGhh dCBhcHBlYXIgaW4gdGhlIGNlbGwgYnV0IG9ubHkgaWYgdGhleSd2ZSBub3QgYXBwZWFyZWQg YmVmb3JlLCBvciBhcmUgdG8gYmUgaWdub3JlZC9vbWl0dGVkDQoJCQkJCQkJaWYgKCEkb21p dF9tZSkgew0KCQkJCQkJCQlpZiAoKCRzaG93X21lICYmICRzaG93X2hvbCkgfHwgJHNob3dz a2lwcGVkKSB7DQoJCQkJCQkJCQkkc21kX2RhdGVbJ2QnXSA9ICRpZHg7DQoJCQkJCQkJCQkk c21kX2RhdGVbJ3cnXSA9IHN0cmZ0aW1lKHNtZF9jYWxfcmVmb3JtYXRfd2luKCclVicsICR0 c19jdXJyKSwgJHRzX2N1cnIpOw0KCQkJCQkJCQkJJHNtZF9kYXRlWydpeSddID0gc3RyZnRp bWUoc21kX2NhbF9yZWZvcm1hdF93aW4oJyVHJywgJHRzX2N1cnIpLCAkdHNfY3Vycik7DQoJ CQkJCQkJCQkkb3AgPSAoJHJlY3VyZm9ybSkgPyBwYXJzZV9mb3JtKCRyZWN1cmZvcm0pIDog KCgkdGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6ICgoJHNpemU9PSJzbWFsbCIpID8gc21kX2Nh bF9taW5pbGluaygkcm93LCAkaWR4LCAkbW9udGgsICR5ZWFyLCAkdXNlX3Bvc3RlZCkgOiBo cmVmKCRyb3dbJ1RpdGxlJ10sIHBlcm1saW5rdXJsKCRyb3cpLCAnIHRpdGxlPSInLiRyb3db J1RpdGxlJ10uJyInKSkgKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCQkkdXNlZCA9 IGFycmF5KCk7DQoJCQkJCQkJaWYgKGlzc2V0KCRldmVudHNbJGlkeF0pICYmICRldmVudHNb JGlkeF0gIT0gTlVMTCkgew0KCQkJCQkJCQlmb3JlYWNoICgkZXZlbnRzWyRpZHhdIGFzICRl dikgew0KCQkJCQkJCQkJJHVzZWRbXSA9ICRldlsnZXYnXTsNCgkJCQkJCQkJfQ0KCQkJCQkJ CX0NCgkJCQkJCQlpZiAoaXNzZXQoJGV2ZW50c1skaWR4XSkgJiYgJGV2ZW50c1skaWR4XSA9 PSBOVUxMIHx8ICFpbl9hcnJheSgkb3AsICR1c2VkKSkgew0KCQkJCQkJCQkkZXZlbnRzWyRp ZHhdW10gPSBhcnJheSgnZXYnID0+ICRvcCwgJ2ZsYWcnID0+ICRzbWRfY2FsX2ZsYWcsICdj bGFzc2VzJyA9PiBhcnJheV9tZXJnZSgkY2ZsYWcsICRzbWRfY2FsX3VjbHMsICRldmNsYXNz ZXMpLCAncG9zdGVkJyA9PiAkc3RhcnRfZGF0ZSk7DQoJCQkJCQkJfQ0KCQkJCQkJCSRzbWRf Y2FsX2ZsYWcgPSAkY2ZsYWcgPSAkc21kX2NhbF91Y2xzID0gYXJyYXkoKTsNCgkJCQkJCQkk dXNlX3Bvc3RlZCA9ICcnOw0KCQkJCQkJfQ0KCQkJCQkJJHRzX2xvb3ArKzsNCgkJCQkJfQ0K CQkJCX0NCgkJCX0NCgkJfSBlbHNlIGlmICgkc2hvd3NwYW5uZWQgJiYgJG11bHRpKSB7DQoJ CQkvLyBOb24tcmVjdXJyaW5nIGV2ZW50cyBtYXkgc3BhbiBtb3JlIHRoYW4gb25lIGRhdGUg YnV0IHRoZXkgbXVzdCBzdGlsbCByZXNwZWN0IGlnbm9yZWQgZGF0ZXMgYW5kIGhvbGlkYXlz DQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJJGxhc3RkYXkgPSAoaW50KXN0 cmZ0aW1lKCclZCcsICRlbmQpOw0KCQkJJHJlYWxfbGFzdGRheSA9IChpbnQpc3RyZnRpbWUo JyVkJywgJHJlYWxfZW5kKTsNCgkJCXdoaWxlICgrKyRpZHggPD0gJGxhc3RkYXkpIHsNCgkJ CQkkb3AgPSAnJzsNCgkJCQkkbXVsdGlmbGFnID0gKCRpZHg9PSRyZWFsX2xhc3RkYXkpID8g J211bHRpbGFzdCcgOiAoKCRpZHg9PTEpID8gJ211bHRpcHJldicgOiAnbXVsdGknKTsNCgkJ CQkkc21kX2NhbF9mbGFnW10gPSAkbXVsdGlmbGFnOw0KCQkJCSR0aGlzdGltZSA9IG1rdGlt ZSgwLCAwLCAwLCAkbW9udGgsICRpZHgsICR5ZWFyKTsNCgkJCQkkdGhpc2RhdGUgPSBkYXRl KCJkLU0tWSIsICR0aGlzdGltZSk7DQoJCQkJJG9taXRfbWUgPSBpbl9hcnJheSgkdGhpc2Rh dGUsICRvbWl0KTsNCgkJCQkkc2hvd19tZSA9ICFpbl9hcnJheSgkdGhpc2RhdGUsICRpZ25v cmUpOw0KCQkJCSRob2xfaGl0ID0gaW5fYXJyYXkoJHRoaXNkYXRlLCAkaG9saWRheXMpOw0K CQkJCSRzaG93X2hvbCA9ICgkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ211bHRpJywkaG9saWRh eWZsYWdzKSApID8gZmFsc2UgOiB0cnVlOw0KCQkJCSR1c2VfcG9zdGVkID0gc21kX2NhbF9p bl9hcnJheShhcnJheSgnbXVsdGknLCAnbXVsdGlmaXJzdCcsICdtdWx0aWxhc3QnLCAnbXVs dGlwcmV2JyksICRsaW5rcG9zdGVkKTsNCgkJCQlpZiAoICRvbWl0X21lICkgew0KCQkJCQkk c21kX2NhbF9mbGFnW10gPSAnb21pdCc7DQoJCQkJfQ0KCQkJCWlmICggKCEkc2hvd19tZSB8 fCAhJHNob3dfaG9sKSAmJiAhJG9taXRfbWUgKSB7DQoJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9 ICdjYW5jZWwnOw0KCQkJCX0NCgkJCQlmb3JlYWNoICgkc21kX2NhbF9mbGFnIGFzICRpdGVt KSB7DQoJCQkJCSRjZmxhZ1tdID0gJGNsc19wZnguJGl0ZW07DQoJCQkJfQ0KCQkJCS8vIENy ZWF0ZSB0aGUgc3Bhbm5lZCBldmVudCB0aGF0IGFwcGVhcnMgaW4gdGhlIGNlbGwNCgkJCQlp ZiAoISRvbWl0X21lKSB7DQoJCQkJCWlmICggKCRzaG93X21lICYmICRzaG93X2hvbCkgfHwg JHNob3dza2lwcGVkKSB7DQoJCQkJCQkkc21kX2RhdGVbJ2QnXSA9ICRpZHg7DQoJCQkJCQkk c21kX2RhdGVbJ3cnXSA9IHN0cmZ0aW1lKHNtZF9jYWxfcmVmb3JtYXRfd2luKCclVicsICR0 aGlzdGltZSksICR0aGlzdGltZSk7DQoJCQkJCQkkc21kX2RhdGVbJ2l5J10gPSBzdHJmdGlt ZShzbWRfY2FsX3JlZm9ybWF0X3dpbignJUcnLCAkdGhpc3RpbWUpLCAkdGhpc3RpbWUpOw0K CQkJCQkJJG9wID0gKCRzcGFuZm9ybSkgPyBwYXJzZV9mb3JtKCRzcGFuZm9ybSkgOiAoKCR0 aGluZykgPyBwYXJzZSgkdGhpbmcpIDogKCgkc2l6ZT09InNtYWxsIikgPyBzbWRfY2FsX21p bmlsaW5rKCRyb3csICRpZHgsICRtb250aCwgJHllYXIsICR1c2VfcG9zdGVkKSA6IGhyZWYo JyZyYXJyOycsIHBlcm1saW5rdXJsKCRyb3cpLCAnIHRpdGxlPSInLiRyb3dbJ1RpdGxlJ10u JyInKSkgKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkZXZlbnRzWyRpZHhdW10gPSBhcnJheSgn ZXYnID0+ICRvcCwgJ2ZsYWcnID0+ICRzbWRfY2FsX2ZsYWcsICdjbGFzc2VzJyA9PiBhcnJh eV9tZXJnZSgkY2ZsYWcsICRzbWRfY2FsX3VjbHMsICRldmNsYXNzZXMpLCAncG9zdGVkJyA9 PiAkc3RhcnRfZGF0ZSk7DQoJCQkJJHNtZF9jYWxfZmxhZyA9ICRjZmxhZyA9ICRzbWRfY2Fs X3VjbHMgPSBhcnJheSgpOw0KCQkJCSR1c2VfcG9zdGVkID0gJyc7DQoJCQl9DQoJCX0NCgkJ Ly8gQWRkIGFueSBleHRyYSBkYXRlcyBmb3IgdGhpcyBldmVudCB0aGF0IGFyZSB3aXRoaW4g dGhlIGN1cnJlbnQgbW9udGgNCgkJaWYgKCRleHRyYWZpZWxkICYmICRyb3dbJGV4dHJhZmll bGRdICE9ICcnKSB7DQoJCQkkeHRyYSA9IGRvX2xpc3QoJHJvd1skZXh0cmFmaWVsZF0pOw0K CQkJJGV2X2hyID0gZGF0ZSgnSCcsICRzdGFydCk7DQoJCQkkZXZfbW4gPSBkYXRlKCdpJywg JHN0YXJ0KTsNCgkJCSRldl9zYyA9IGRhdGUoJ3MnLCAkc3RhcnQpOw0KCQkJJHN0YW1wb2Zm ID0gKGludCkoMzYwMCokZXZfaHIpICsgKGludCkoNjAqJGV2X21uKSArIChpbnQpJGV2X3Nj Ow0KCQkJZm9yZWFjaCAoJHh0cmEgYXMgJHZhbCkgew0KCQkJCWlmIChzdHJwb3MoJHZhbCwg IisiKSA9PT0gZmFsc2UpIHsNCgkJCQkJJGV4cm5nID0gc21kX2V4cGFuZF9kYXRlcmFuZ2Uo JHZhbCk7DQoJCQkJCSR2YWwgPSBkYXRlKCJZLW0tZCIsICRleHJuZ1swXSk7DQoJCQkJCSRz cGlkdGggPSBjb3VudCgkZXhybmcpOw0KCQkJCQkkc3BleCA9IDA7DQoJCQkJfSBlbHNlIHsN CgkJCQkJJGNoayA9ICRzaG93c3Bhbm5lZCAmJiAhJHJlY3VyOw0KCQkJCQkkc3BpZHRoID0g JGNoayA/IGNlaWwoJGRpZmYgLyAoNjAqNjAqMjQpKSA6IDE7IC8vIGRheXMgYmV0d2VlbiBk YXRlcw0KCQkJCQkkdmFsID0gcnRyaW0oJHZhbCwgJysnKTsNCgkJCQkJJHNwZXggPSAkY2hr ID8gMSA6IDA7DQoJCQkJfQ0KDQoJCQkJZm9yICgkamR4ID0gMTsgJGpkeCA8PSAkc3BpZHRo OyAkamR4KyspIHsNCgkJCQkJJHRtID0gc2FmZV9zdHJ0b3RpbWUoJHZhbCAuICgoJGpkeD09 MSkgPyAnJyA6ICcrJy4oJGpkeC0xKS4nIGRheXMnKSk7DQoJCQkJCWlmICgkZGlmZiA+IDAg JiYgJGpkeCA9PSAxKSB7DQoJCQkJCQkkZXhwc3RhbXAgPSAkdG0rJHN0YW1wb2ZmKyRyZWFs X2RpZmY7DQoJCQkJCX0NCgkJCQkJJGlkeCA9ICRzbWRfZGF0ZVsnZCddID0gKGludClzdHJm dGltZSgnJWQnLCAkdG0pOw0KCQkJCQkkZHQgPSBkYXRlKCJZLW0tZCIsICR0bSk7DQoJCQkJ CSRsc3QgPSAoJGV4dHJhc3RyaWN0KSA/ICRlbmQgOiAkdHNfbGFzdDsNCgkJCQkJaWYgKCR0 bSA8ICRsc3QgJiYgJHRtID49ICR0c19maXJzdCkgew0KCQkJCQkJJGZha2Vyb3cgPSAkcm93 Ow0KCQkJCQkJJGZha2Vyb3dbJ1Bvc3RlZCddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCAkdG0r JHN0YW1wb2ZmKTsNCgkJCQkJCSRmYWtlcm93Wyd1UG9zdGVkJ10gPSAkdG0rJHN0YW1wb2Zm Ow0KCQkJCQkJaWYgKCRkaWZmPjApIHsNCgkJCQkJCQkkZmFrZXJvd1snRXhwaXJlcyddID0g ZGF0ZSgiWS1tLWQgSDppOnMiLCAkZXhwc3RhbXApOw0KCQkJCQkJCSRmYWtlcm93Wyd1RXhw aXJlcyddID0gJGV4cHN0YW1wOw0KCQkJCQkJfQ0KDQoJCQkJCQlwb3B1bGF0ZUFydGljbGVE YXRhKCRmYWtlcm93KTsNCgkJCQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdleHRyYSc7DQoJCQkJ CQkkY2ZsYWdbXSA9ICRjbHNfcGZ4LidleHRyYSc7DQoJCQkJCQkkb21pdF9tZSA9IGZhbHNl Ow0KCQkJCQkJJHNob3dfbWUgPSAkc2hvd19ob2wgPSB0cnVlOw0KCQkJCQkJaWYgKCRzcGV4 KSB7DQoJCQkJCQkJJG11bHRpZmxhZyA9ICgkamR4PT0xKSA/ICdtdWx0aWZpcnN0JyA6ICgo JGpkeD09JHNwaWR0aCkgPyAnbXVsdGlsYXN0JyA6ICgoJGlkeD09MSkgPyAnbXVsdGlwcmV2 JyA6ICdtdWx0aScpKTsNCgkJCQkJCQkkdGhpc2RhdGUgPSBkYXRlKCJkLU0tWSIsICR0bSk7 DQoJCQkJCQkJJG9taXRfbWUgPSBpbl9hcnJheSgkdGhpc2RhdGUsICRvbWl0KTsNCgkJCQkJ CQkkc2hvd19tZSA9ICFpbl9hcnJheSgkdGhpc2RhdGUsICRpZ25vcmUpOw0KCQkJCQkJCSRo b2xfaGl0ID0gaW5fYXJyYXkoJHRoaXNkYXRlLCAkaG9saWRheXMpOw0KCQkJCQkJCSRzaG93 X2hvbCA9ICgkaG9sX2hpdCAmJiAhaW5fYXJyYXkoJ211bHRpJywkaG9saWRheWZsYWdzKSAp ID8gZmFsc2UgOiB0cnVlOw0KCQkJCQkJCSR1c2VfcG9zdGVkID0gaW5fYXJyYXkoJ2V4dHJh JywgJGxpbmtwb3N0ZWQpOw0KCQkJCQkJCWlmICgkb21pdF9tZSkgew0KCQkJCQkJCQkkc21k X2NhbF9mbGFnW10gPSAnb21pdCc7DQoJCQkJCQkJfQ0KCQkJCQkJCWlmICggKCEkc2hvd19t ZSB8fCAhJHNob3dfaG9sKSAmJiAhJG9taXRfbWUgKSB7DQoJCQkJCQkJCSRzbWRfY2FsX2Zs YWdbXSA9ICdjYW5jZWwnOw0KCQkJCQkJCX0NCgkJCQkJCQkkc21kX2NhbF9mbGFnW10gPSAk bXVsdGlmbGFnOw0KCQkJCQkJCSRjZmxhZ1tdID0gJGNsc19wZnguJG11bHRpZmxhZzsNCgkJ CQkJCX0NCgkJCQkJCWlmICghJG9taXRfbWUpIHsNCgkJCQkJCQlpZiAoICgkc2hvd19tZSAm JiAkc2hvd19ob2wpIHx8ICRzaG93c2tpcHBlZCkgew0KCQkJCQkJCQkkc21kX2RhdGVbJ3cn XSA9IHN0cmZ0aW1lKHNtZF9jYWxfcmVmb3JtYXRfd2luKCclVicsICR0bSksICR0bSk7DQoJ CQkJCQkJCSRzbWRfZGF0ZVsnaXknXSA9IHN0cmZ0aW1lKHNtZF9jYWxfcmVmb3JtYXRfd2lu KCclRycsICR0bSksICR0bSk7DQoJCQkJCQkJCSRvcCA9ICgkc3BleCAmJiAkc3BhbmZvcm0p ID8gcGFyc2VfZm9ybSgkc3BhbmZvcm0pIDogKCgkdGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6 ICgoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9ybSkgOiAoKCRzaXplPT0ic21hbGwiKSA/IHNt ZF9jYWxfbWluaWxpbmsoJHJvdywgJGlkeCwgJG1vbnRoLCAkeWVhciwgJHVzZV9wb3N0ZWQp IDogaHJlZigoKCRzcGV4ICYmICRqZHg+MSkgPyAnJnJhcnI7JyA6ICRyb3dbJ1RpdGxlJ10p LCBwZXJtbGlua3VybCgkcm93KSwgJyB0aXRsZT0iJy4kcm93WydUaXRsZSddLiciJykpICkp Ow0KCQkJCQkJCQkkZXZlbnRzWyRpZHhdW10gPSBhcnJheSgnZXYnID0+ICRvcCwgJ2ZsYWcn ID0+ICRzbWRfY2FsX2ZsYWcsICdjbGFzc2VzJyA9PiBhcnJheV9tZXJnZSgkY2ZsYWcsICRz bWRfY2FsX3VjbHMsICRldmNsYXNzZXMpLCAncG9zdGVkJyA9PiAkZHQpOw0KCQkJCQkJCQkk c21kX2NhbF9mbGFnID0gJGNmbGFnID0gJHNtZF9jYWxfdWNscyA9IGFycmF5KCk7DQoJCQkJ CQkJCSR1c2VfcG9zdGVkID0gJyc7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJ fQ0KCQkJfQ0KCQl9DQoJfQ0KCWFydGljbGVfcG9wKCk7DQoNCglpZiAoJGRlYnVnID4gMSAm JiAkZXZlbnRzKSB7DQoJCWVjaG8gJysrIEFMTCBFVkVOVFMgKysnOw0KCQlkbXAoJGV2ZW50 cyk7DQoJfQ0KDQoJLy8gR2VuZXJhdGUgdGhlIGNhbGVuZGFyDQoJJGNhbGVuZGFyID0gbmV3 IFNNRF9DYWxlbmRhcigkc2l6ZSwgJHllYXIsICRtb250aCwgJGV2ZW50cywgJHNlY3Rpb24s ICRjYXRlZ29yeSwgJGRlYnVnKTsNCgkkY2FsZW5kYXItPnNldFdlZWsoJHdlZWspOw0KCSRj YWxlbmRhci0+c2V0R01UKCRnbXQpOw0KCSRjYWxlbmRhci0+c2V0TGFuZygkbGFuZyk7DQoJ JGNhbGVuZGFyLT5zZXRDbGFzc0xldmVscygkY2xldnMpOw0KCSRjYWxlbmRhci0+c2V0Q2xh c3NQcmVmaXgoJGNsc19wZngpOw0KCSRjYWxlbmRhci0+c2V0RXZlbnRXcmFwdGFnKCRldmVu dHdyYXB0YWcpOw0KCSRjYWxlbmRhci0+c2V0Q2VsbEZvcm0oJGNlbGxmb3JtKTsNCgkkY2Fs ZW5kYXItPnNldEhkckZvcm0oJGhlYWRlcmZvcm0pOw0KCSRjYWxlbmRhci0+c2V0TVlXcmFw dGFnKCRteXdyYXB0YWcpOw0KCSRjYWxlbmRhci0+c2V0U3VtbWFyeSgkc3VtbWFyeSk7DQoJ JGNhbGVuZGFyLT5zZXRDYXB0aW9uKCRjYXB0aW9uKTsNCgkkY2FsZW5kYXItPnNldFRhYmxl SUQoJGlkKTsNCgkkY2FsZW5kYXItPnNldFRhYmxlQ2xhc3MoJGNsYXNzKTsNCgkkY2FsZW5k YXItPnNldFJvd0NsYXNzKCRyb3djbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRDZWxsQ2xhc3Mo JGNlbGxjbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRFbXB0eUNsYXNzKCRlbXB0eWNsYXNzKTsN CgkkY2FsZW5kYXItPnNldElTT1dlZWtDbGFzcygkaXNvd2Vla2NsYXNzKTsNCgkkY2FsZW5k YXItPnNldE5hdkluZm8oJG5hdnBjbGFzcywkbmF2bmNsYXNzLCRuYXZwYXJyLCRuYXZuYXJy LCRuYXZpZCk7DQoJJGNhbGVuZGFyLT5zZXROYXZLZWVwKCRtYWludGFpbik7DQoJJGNhbGVu ZGFyLT5zZXRNWUNsYXNzKCRteWNsYXNzKTsNCgkkY2FsZW5kYXItPnNldE5hbWVGb3JtYXQo JGRheWZvcm1hdCwgImQiKTsNCgkkY2FsZW5kYXItPnNldE5hbWVGb3JtYXQoJG1vbnRoZm9y bWF0LCAibSIpOw0KCSRjYWxlbmRhci0+c2V0UmVtYXAoJGRtYXApOw0KCSRjYWxlbmRhci0+ c2V0U2hvd0lTT1dlZWsoJGlzb3dlZWtzKTsNCgkkY2FsZW5kYXItPnNldEVZZWFyKCRlYXJs aWVzdCk7DQoJJGNhbGVuZGFyLT5zZXRMWWVhcigkbGF0ZXN0KTsNCgkkY2FsZW5kYXItPnNl dEZpbHRlck9wdHMoJGZvcHRzKTsNCgkkY2FsZW5kYXItPnNldEhvbGlkYXlzKCRob2xpZGF5 cyk7DQoJJGNhbGVuZGFyLT5zZXRTZWxlY3RvcnMoZG9fbGlzdCgkc2VsZWN0KSwgJHNlbGVj dGJ0bik7DQoJJGNhbGVuZGFyLT5zZXRGaXJzdERheU9mV2VlaygkZmlyc3RkYXkpOw0KDQoJ cmV0dXJuICRjYWxlbmRhci0+ZGlzcGxheSgkc3RhdGljKTsNCn0NCg0KY2xhc3MgU01EX0Nh bGVuZGFyIGV4dGVuZHMgU01EX1Jhd19DYWxlbmRhciB7DQoJLy8gT3ZlcnJpZGUgQ29uc3Ry dWN0b3INCgkvLyBQZXJtaXRzIG11bHRpcGxlIGV2ZW50cyB0byBzaG93IHBlciBkYXkNCgl2 YXIgJHNlY3Rpb24gPSAnJzsNCgl2YXIgJGNhdGVnb3J5ID0gJyc7DQoJdmFyICRzaXplID0g Jyc7DQoJdmFyICRkZWJ1ZyA9IDA7DQoJdmFyICRldmVudHMgPSBhcnJheSgpOw0KCWZ1bmN0 aW9uIFNNRF9DYWxlbmRhcigkc2l6ZSwkeWVhciwkbW9udGgsJGV2ZW50cywkc2VjdGlvbiwk Y2F0ZWdvcnksICRkZWJ1Zz0wKSB7DQoJCSR0aGlzLT5kZWJ1ZyA9ICRkZWJ1ZzsNCgkJJHRo aXMtPnNlY3Rpb24gPSAkc2VjdGlvbjsNCgkJJHRoaXMtPmNhdGVnb3J5ID0gJGNhdGVnb3J5 Ow0KCQkkdGhpcy0+ZXZlbnRzID0gJGV2ZW50czsNCgkJJHRoaXMtPnNpemUgPSAkc2l6ZTsN CgkJJHRoaXMtPnNtZF9SYXdfQ2FsZW5kYXIoJHllYXIsJG1vbnRoLCRkZWJ1Zyk7DQoJfQ0K DQoJLy8gT3ZlcnJpZGUgZHNwRGF5Q2VsbCB0byBkaXNwbGF5IHN0dWZmIHJpZ2h0DQoJZnVu Y3Rpb24gZHNwRGF5Q2VsbCgkdGhlZGF5KSB7DQoJCWdsb2JhbCAkc21kX2NhbF9mbGFnLCAk c21kX2NhbGluZm8sICRzbWRfY2FsX3VjbHMsICRzbWRfZGF0ZSwgJHBlcm1saW5rX21vZGU7 DQoNCgkJJHNtZF9jYWxfZmxhZyA9ICRzbWRfY2FsX3VjbHMgPSAkdGRjbGFzcyA9IGFycmF5 KCk7DQoJCSRoYXNhcnRpY2xlID0gaXNzZXQoJHRoaXMtPmV2ZW50c1skdGhlZGF5XSk7DQoJ CSRub3cgPSB0aW1lKCkgKyB0el9vZmZzZXQoKTsNCg0KCQkkdGhlZGF0ZSA9IG1rdGltZSgw LCAwLCAwLCAkdGhpcy0+bW9udGgsICR0aGVkYXksICR0aGlzLT55ZWFyKTsNCgkJJGhvbF9o aXQgPSBpbl9hcnJheShkYXRlKCJkLU0tWSIsICR0aGVkYXRlKSwgJHRoaXMtPmhvbGlkYXlz KTsNCgkJaWYgKCRoYXNhcnRpY2xlKSB7DQoJCQkkc21kX2NhbF9mbGFnW10gPSAnZXZlbnQn Ow0KCQl9DQoJCWlmICgkaG9sX2hpdCkgew0KCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2hvbHMn Ow0KCQl9DQoJCSRjZmxhZyA9IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRzbWRfY2FsX2ZsYWcg YXMgJGl0ZW0pIHsNCgkJCSRjZmxhZ1tdID0gJHRoaXMtPmNsc19wZnguJGl0ZW07DQoJCX0N Cg0KCQlpZiAoJHRoaXMtPmNlbGxjbGFzcykgew0KCQkJJHRkY2xhc3NbXSA9ICR0aGlzLT5j ZWxsY2xhc3M7DQoJCX0NCgkJJHRkY2xhc3MgPSBhcnJheV9tZXJnZSgkdGRjbGFzcywgJGNm bGFnKTsNCgkJJHJ1bm5pbmdjbGFzcyA9IChpbl9hcnJheSgiY2VsbCIsICR0aGlzLT5jbHNf bGV2KSB8fCBpbl9hcnJheSgiY2VsbHBsdXMiLCAkdGhpcy0+Y2xzX2xldikpID8gJHRkY2xh c3MgOiBhcnJheSgpOw0KDQoJCWlmKCR0aGlzLT55ZWFyID09IGRhdGUoJ1knLCRub3cpIGFu ZCAkdGhpcy0+bW9udGggPT0gZGF0ZSgnbicsJG5vdykgYW5kICR0aGVkYXkgPT0gZGF0ZSgn aicsJG5vdykgKSB7DQoJCQkkc21kX2NhbF9mbGFnW10gPSAndG9kYXknOw0KCQkJJHJ1bm5p bmdjbGFzc1tdID0gJHRoaXMtPmNsc19wZnguJ3RvZGF5JzsNCgkJfQ0KDQoJCSRvdXQgPSAk ZmxhZ3MgPSBhcnJheSgpOw0KCQkkZm91dCA9IGFycmF5KCdzdGFuZGFyZCc9PmFycmF5KCks J3JlY3VyJz0+YXJyYXkoKSwncmVjdXJmaXJzdCc9PmFycmF5KCksJ211bHRpZmlyc3QnPT5h cnJheSgpLCdtdWx0aSc9PmFycmF5KCksJ211bHRpcHJldic9PmFycmF5KCksJ211bHRpbGFz dCc9PmFycmF5KCksJ2NhbmNlbCc9PmFycmF5KCksJ2V4dHJhJz0+YXJyYXkoKSk7DQoJCWlm IChlbXB0eSgkdGhpcy0+Y2VsbGZvcm0pICYmICR0aGlzLT5zaXplID09ICdsYXJnZScpIHsN CgkJCSRvdXRbXSA9IGhlZCgkdGhlZGF5LDQpOw0KCQl9DQoJCWlmKCBpc3NldCgkdGhpcy0+ ZXZlbnRzWyR0aGVkYXldKSApIHsNCgkJCSRkYXlzX2V2ZW50cyA9ICR0aGlzLT5ldmVudHNb JHRoZWRheV07DQoJCQkkZXZjbnQgPSAwOw0KCQkJZm9yZWFjaCgkZGF5c19ldmVudHMgYXMg JGV2KSB7DQoJCQkJJGV2Y2xhc3MgPSAkZXZbJ2NsYXNzZXMnXTsNCgkJCQkkZmxhZ3MgPSBh cnJheV9tZXJnZSgkZmxhZ3MsICRldlsnZmxhZyddKTsNCgkJCQlpZiAoaW5fYXJyYXkoImNl bGxwbHVzIiwgJHRoaXMtPmNsc19sZXYpKSB7DQoJCQkJCSRydW5uaW5nY2xhc3MgPSBhcnJh eV9tZXJnZSgkcnVubmluZ2NsYXNzLCAkZXZjbGFzcyk7DQoJCQkJfQ0KCQkJCSRjbHMgPSAo JGV2Y2xhc3MgJiYgaW5fYXJyYXkoImV2ZW50IiwgJHRoaXMtPmNsc19sZXYpKSA/ICcgY2xh c3M9Iicuam9pbignICcsICRldmNsYXNzKS4nIicgOiAnJzsNCgkJCQkkb3AgPSAoJHRoaXMt PmV2d3JhcHRhZykgPyB0YWcoJGV2WydldiddLCAkdGhpcy0+ZXZ3cmFwdGFnLCAkY2xzKSA6 ICRldlsnZXYnXTsNCgkJCQlmb3JlYWNoICgkZXZbJ2ZsYWcnXSBhcyAkZmxldikgew0KCQkJ CQkkZm91dFskZmxldl1bXSA9ICRvcDsNCgkJCQl9DQoJCQkJJG91dFtdID0gJG9wOw0KCQkJ CSRldmNudCsrOw0KCQkJCWlmICgkdGhpcy0+c2l6ZSA9PSAnc21hbGwnICYmICRldmNudCA9 PSAxKSB7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlaWYgKCR0aGlzLT5z aXplID09ICdzbWFsbCcpIHsNCgkJCSRvdXRbXSA9IGhlZCgkdGhlZGF5LDQpOw0KCQl9DQoN CgkJLy8gQW1hbGdhbWF0ZSB0aGUgZXZlbnQtbGV2ZWwgY2xhc3NlcyBhbmQgY2VsbC1sZXZl bCBjbGFzc2VzIGlmIHJlcXVpcmVkDQoJCSRydW5uaW5nY2xhc3MgPSBhcnJheV91bmlxdWUo JHJ1bm5pbmdjbGFzcyk7DQoJCWlmIChpbl9hcnJheSgiY2VsbHBsdXMiLCAkdGhpcy0+Y2xz X2xldikpIHsNCgkJCSRzbWRfY2FsX2ZsYWcgPSBhcnJheV9tZXJnZSgkc21kX2NhbF9mbGFn LCAkZmxhZ3MpOw0KCQl9DQoNCgkJaWYgKCR0aGlzLT5jZWxsZm9ybSkgew0KCQkJJHRoaXN0 aW1lID0gbWt0aW1lKDAsIDAsIDAsICR0aGlzLT5tb250aCwgJHRoZWRheSwgJHRoaXMtPnll YXIpOw0KCQkJJHNtZF9jYWxpbmZvWydpZCddID0gJHRoaXMtPnRhYmxlSUQ7DQoJCQkkc21k X2RhdGVbJ3knXSA9ICR0aGlzLT55ZWFyOw0KCQkJJHNtZF9kYXRlWydtJ10gPSAkdGhpcy0+ bW9udGg7DQoJCQkkc21kX2RhdGVbJ3cnXSA9IHN0cmZ0aW1lKHNtZF9jYWxfcmVmb3JtYXRf d2luKCclVicsICR0aGlzdGltZSksICR0aGlzdGltZSk7DQoJCQkkc21kX2RhdGVbJ2l5J10g PSBzdHJmdGltZShzbWRfY2FsX3JlZm9ybWF0X3dpbignJUcnLCAkdGhpc3RpbWUpLCAkdGhp c3RpbWUpOw0KCQkJJHNtZF9kYXRlWydkJ10gPSAkdGhlZGF5Ow0KCQkJJHJlcHMgPSBhcnJh eSgNCgkJCQkne2V2aWR9JyA9PiAkc21kX2NhbGluZm9bJ2V2aWQnXSwNCgkJCQkne3N0YW5k YXJkfScgPT4gam9pbignJywkZm91dFsnc3RhbmRhcmQnXSksDQoJCQkJJ3tyZWN1cn0nID0+ IGpvaW4oJycsJGZvdXRbJ3JlY3VyJ10pLA0KCQkJCSd7cmVjdXJmaXJzdH0nID0+IGpvaW4o JycsJGZvdXRbJ3JlY3VyZmlyc3QnXSksDQoJCQkJJ3thbGxyZWN1cn0nID0+IGpvaW4oJycs YXJyYXlfbWVyZ2UoJGZvdXRbJ3JlY3VyJ10sICRmb3V0WydyZWN1cmZpcnN0J10pKSwNCgkJ CQkne211bHRpZmlyc3R9JyA9PiBqb2luKCcnLCRmb3V0WydtdWx0aWZpcnN0J10pLA0KCQkJ CSd7bXVsdGlwcmV2fScgPT4gam9pbignJywkZm91dFsnbXVsdGlwcmV2J10pLA0KCQkJCSd7 bXVsdGl9JyA9PiBqb2luKCcnLCRmb3V0WydtdWx0aWxhc3QnXSksDQoJCQkJJ3ttdWx0aWxh c3R9JyA9PiBqb2luKCcnLCRmb3V0WydtdWx0aWxhc3QnXSksDQoJCQkJJ3thbGxtdWx0aX0n ID0+IGpvaW4oJycsYXJyYXlfbWVyZ2UoJGZvdXRbJ211bHRpZmlyc3QnXSwkZm91dFsnbXVs dGknXSwkZm91dFsnbXVsdGlwcmV2J10sJGZvdXRbJ211bHRpbGFzdCddKSksDQoJCQkJJ3tj YW5jZWx9JyA9PiBqb2luKCcnLCRmb3V0WydjYW5jZWwnXSksDQoJCQkJJ3tleHRyYX0nID0+ IGpvaW4oJycsJGZvdXRbJ2V4dHJhJ10pLA0KCQkJCSd7ZXZlbnRzfScgPT4gam9pbignJywk b3V0KSwNCgkJCQkne2RheX0nID0+ICR0aGVkYXksDQoJCQkJJ3tkYXl6ZXJvc30nID0+IHN0 cl9wYWQoJHRoZWRheSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCSd7d2Vla2RheX0n ID0+ICgoaXNfYXJyYXkoJHRoaXMtPmRheU5hbWVGbXQpKSA/ICR0aGlzLT5kYXlOYW1lc1tk YXRlKCd3JywkdGhpc3RpbWUpXSA6IHN0cmZ0aW1lKCR0aGlzLT5kYXlOYW1lRm10LCAkdGhp c3RpbWUpKSwNCgkJCQkne3dlZWtkYXlhYmJyfScgPT4gc3RyZnRpbWUoJyVhJywgJHRoaXN0 aW1lKSwNCgkJCQkne3dlZWtkYXlmdWxsfScgPT4gc3RyZnRpbWUoJyVBJywgJHRoaXN0aW1l KSwNCgkJCQkne3dlZWt9JyA9PiAkc21kX2RhdGVbJ3cnXSwNCgkJCQkne21vbnRofScgPT4g JHRoaXMtPm1vbnRoLA0KCQkJCSd7bW9udGh6ZXJvc30nID0+IHN0cl9wYWQoJHRoaXMtPm1v bnRoLCAyLCAnMCcsIFNUUl9QQURfTEVGVCksDQoJCQkJJ3ttb250aG5hbWV9JyA9PiAoKGlz X2FycmF5KCR0aGlzLT5tdGhOYW1lRm10KSkgPyAkdGhpcy0+bXRoTmFtZXNbZGF0ZSgnbics JHRoaXN0aW1lKV0gOiBzdHJmdGltZSgkdGhpcy0+bXRoTmFtZUZtdCwgJHRoaXN0aW1lKSks DQoJCQkJJ3ttb250aG5hbWVhYmJyfScgPT4gc3RyZnRpbWUoJyViJywgJHRoaXN0aW1lKSwN CgkJCQkne21vbnRobmFtZWZ1bGx9JyA9PiBzdHJmdGltZSgnJUInLCAkdGhpc3RpbWUpLA0K CQkJCSd7eWVhcn0nID0+ICR0aGlzLT55ZWFyLA0KCQkJCSd7c2hvcnR5ZWFyfScgPT4gc3Ry ZnRpbWUoJyV5JywgJHRoaXN0aW1lKSwNCgkJCQkne2lzb3llYXJ9JyA9PiAkc21kX2RhdGVb J2l5J10sDQoJCQkJJ3tzaG9ydGlzb3llYXJ9JyA9PiBzdHJmdGltZShzbWRfY2FsX3JlZm9y bWF0X3dpbignJWcnLCAkdGhpc3RpbWUpLCAkdGhpc3RpbWUpLA0KCQkJKTsNCgkJCSRjZWxs b3V0ID0gcGFyc2Uoc3RydHIoJHRoaXMtPmNlbGxmb3JtLCAkcmVwcykpOw0KCQkJJGNhcnJh eSA9IGFycmF5X21lcmdlKCRydW5uaW5nY2xhc3MsICRzbWRfY2FsX3VjbHMpOw0KCQkJJHNt ZF9jYWxfdWNscyA9IGFycmF5KCk7DQoNCgkJCXJldHVybiBkb1RhZygkY2VsbG91dCwndGQn LGpvaW4oJyAnLCRjYXJyYXkpKTsNCgkJfSBlbHNlIHsNCgkJCXJldHVybiBkb1RhZyhqb2lu KCcnLCRvdXQpLCd0ZCcsam9pbignICcsJHJ1bm5pbmdjbGFzcykpOw0KCQl9DQoJfQ0KDQoJ ZnVuY3Rpb24gZGlzcGxheSgkc3RhdGljPWZhbHNlKSB7DQoJCSRzdW0gPSAoJHRoaXMtPnRi bFN1bW1hcnkpID8gJyBzdW1tYXJ5PSInLiR0aGlzLT50YmxTdW1tYXJ5LiciJyA6ICcnOw0K CQkkaWQgPSAoJHRoaXMtPnRhYmxlSUQpID8gJyBpZD0iJy4kdGhpcy0+dGFibGVJRC4nIicg OiAnJzsNCgkJJGNbXSA9ICgkdGhpcy0+dGJsQ2FwdGlvbikgPyAnPGNhcHRpb24+Jy4kdGhp cy0+dGJsQ2FwdGlvbi4nPC9jYXB0aW9uPicgOiAnJzsNCgkJJGNbXSA9ICc8dGhlYWQ+JzsN CgkJJGNbXSA9ICR0aGlzLT5kc3BIZWFkZXIoJHN0YXRpYyk7DQoJCSRjW10gPSAkdGhpcy0+ ZHNwRGF5TmFtZXMoKTsNCgkJJGNbXSA9ICc8L3RoZWFkPic7DQoJCSRjW10gPSAkdGhpcy0+ ZHNwRGF5Q2VsbHMoKTsNCg0KCQlyZXR1cm4gZG9UYWcoam9pbignJywkYyksJ3RhYmxlJywk dGhpcy0+dGFibGVjbGFzcywkc3VtLiRpZCk7DQoJfQ0KDQoJZnVuY3Rpb24gZHNwSGVhZGVy KCRzdGF0aWMpIHsNCgkJZ2xvYmFsICRwcmV0ZXh0LCAkc21kX2NhbGluZm8sICRwZXJtbGlu a19tb2RlOw0KDQoJCSRjdXJybW8gPSAkdGhpcy0+bW9udGg7DQoJCSRjdXJyeXIgPSAkdGhp cy0+eWVhcjsNCgkJJG5hdnBjbGFzcyA9ICR0aGlzLT5nZXROYXZJbmZvKCJwYyIpOw0KCQkk bmF2bmNsYXNzID0gJHRoaXMtPmdldE5hdkluZm8oIm5jIik7DQoJCSRuYXZwYXJyb3cgPSAk dGhpcy0+Z2V0TmF2SW5mbygicGEiKTsNCgkJJG5hdm5hcnJvdyA9ICR0aGlzLT5nZXROYXZJ bmZvKCJuYSIpOw0KCQkkbmF2aWQgPSAkdGhpcy0+Z2V0TmF2SW5mbygiaWQiKTsNCgkJJG5h dnBjbGFzcyA9ICgkbmF2cGNsYXNzKSA/ICcgY2xhc3M9IicuJG5hdnBjbGFzcy4nIicgOiAn JzsNCgkJJG5hdm5jbGFzcyA9ICgkbmF2bmNsYXNzKSA/ICcgY2xhc3M9IicuJG5hdm5jbGFz cy4nIicgOiAnJzsNCgkJJGZvcHRzID0gJHRoaXMtPmZvcHRzOw0KDQoJCSRzZWMgPSAoaXNz ZXQoJHNtZF9jYWxpbmZvWydzJ10pICYmICFlbXB0eSgkc21kX2NhbGluZm9bJ3MnXSkpID8g JHNtZF9jYWxpbmZvWydzJ10gOiAnJzsNCgkJZm9yZWFjaCAoJHRoaXMtPm1haW50YWluIGFz ICRjb2wpIHsNCgkJCXN3aXRjaCAoJGNvbCkgew0KCQkJCWNhc2UgInNlY3Rpb24iOg0KCQkJ CQlpZiAoJHByZXRleHRbJ3MnXSAmJiAkcGVybWxpbmtfbW9kZSAhPSAneWVhcl9tb250aF9k YXlfdGl0bGUnKSB7DQoJCQkJCQkkZm9wdHMgPSBhcnJheSgncycgPT4gJHByZXRleHRbJ3Mn XSkgKyAkZm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiYXJ0aWNsZSI6 DQoJCQkJCWlmICgkcHJldGV4dFsnaWQnXSkgew0KCQkJCQkJJGZvcHRzID0gYXJyYXkoJ2lk JyA9PiAkcHJldGV4dFsnaWQnXSkgKyAkZm9wdHM7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJ CQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCQlpZiAoJHByZXRleHRbJ2MnXSkgew0KCQkJCQkJ JGZvcHRzID0gYXJyYXkoJ2MnID0+ICRwcmV0ZXh0WydjJ10pICsgJGZvcHRzOw0KCQkJCQl9 DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgImF1dGhvciI6DQoJCQkJCWlmIChncHMoJ2F1dGhv cicpKSB7DQoJCQkJCQkkZm9wdHMgPSBhcnJheSgnYXV0aG9yJyA9PiBncHMoJ2F1dGhvcicp KSArICRmb3B0czsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJkYXRlIjoNCgkJ CQkJaWYgKGdwcygnZGF0ZScpKSB7DQoJCQkJCQkkZm9wdHMgPSBhcnJheSgnZGF0ZScgPT4g Z3BzKCdkYXRlJykpICsgJGZvcHRzOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2Ug InBnIjoNCgkJCQkJaWYgKCRwcmV0ZXh0WydwZyddKSB7DQoJCQkJCQkkZm9wdHMgPSBhcnJh eSgncGcnID0+ICRwcmV0ZXh0WydwZyddKSArICRmb3B0czsNCgkJCQkJfQ0KCQkJCQlicmVh azsNCgkJCQljYXNlICJjYWxpZCI6DQoJCQkJCWlmICgkdGhpcy0+dGFibGVJRCkgew0KCQkJ CQkJJGZvcHRzID0gYXJyYXkoJ2NhbGlkJyA9PiAkdGhpcy0+dGFibGVJRCkgKyAkZm9wdHM7 DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJaWYgKGdwcygkY29s KSkgew0KCQkJCQkJJGZvcHRzID0gYXJyYXkoJGNvbCA9PiBncHMoJGNvbCkpICsgJGZvcHRz Ow0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoNCgkJJGZvcHRzID0gYXJyYXlf dW5pcXVlKCRmb3B0cyk7DQoJCSRmaWx0ZXJzID0gYXJyYXkoKTsNCgkJJGZpbHRlckhpZCA9 IGFycmF5KCk7DQoJCWlmICghJHN0YXRpYykgew0KCQkJZm9yZWFjaCgkZm9wdHMgYXMgJGtl eSA9PiAkdmFsKSB7DQoJCQkJJGZpbHRlcnNbXSA9ICRrZXkuJz0nLiR2YWw7DQoJCQkJJGZp bHRlckhpZFtdID0gaElucHV0KCRrZXksICR2YWwpOw0KCQkJfQ0KCQl9DQoNCgkJLy8gV2Vl ayBzZWxlY3QgbGlzdA0KCQlpZiAoJHRoaXMtPnVzZVNlbGVjdG9yKCd3ZWVrJykgJiYgISRz dGF0aWMpIHsNCgkJCSRjdXJyd2sgPSAoJHRoaXMtPndlZWspID8gJHRoaXMtPndlZWsgOiBk YXRlKCdXJywgc2FmZV9zdHJ0b3RpbWUoJGN1cnJ5ci4iLSIuJGN1cnJtby4iLTEgMTI6MDAi KSk7DQoJCQlmb3IgKCAkaWR4ID0gMTsgJGlkeCA8PSA1MzsgJGlkeCsrICkgew0KCQkJCSR0 YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsNCgkJCQlpZiAoICRpZHggPT0gJGN1cnJ3 ayApICR0YWdhdHRzIC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7DQoJCQkJJG9wdGlvbnRh Z3NbXSA9IGRvVGFnKCR0aGlzLT5zZWxwZnhbJ3dlZWsnXS5zdHJfcGFkKCRpZHgsIDIsICcw JywgU1RSX1BBRF9MRUZUKS4kdGhpcy0+c2Vsc2Z4Wyd3ZWVrJ10sICdvcHRpb24nLCAnJywg JHRhZ2F0dHMpOw0KCQkJfQ0KCQkJJHNlbGVjdG9yW10gPSBkb1RhZyhqb2luKG4sICRvcHRp b250YWdzKSwgJ3NlbGVjdCcsICgoJHRoaXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5t eWNsYXNzKSwgJyBuYW1lPSInLiR0aGlzLT5yZW1hcFsndyddLiciJy4oKCR0aGlzLT5zZWxi dG4pID8gJycgOiAnIG9uY2hhbmdlPSJzdWJtaXQoKSInKSwgJycpDQogICAJCQkJLiAoKCR0 aGlzLT51c2VTZWxlY3RvcigneWVhcicpKSA/ICcnIDogaElucHV0KCR0aGlzLT5yZW1hcFsn eSddLCAkY3VycnlyKSk7DQoJCQkkb3B0aW9udGFncyA9IGFycmF5KCk7IC8vIEJsYW5rIG91 dA0KCQl9DQoNCgkJLy8gTW9udGggc2VsZWN0IGxpc3QgLSBub3RlIG1rdGltZSBoYXMgdGhl IGRheSBmb3JjZWQgdG8gMS4gSWYgbm90IHlvdSBnZXQNCgkJLy8gYml6YXJyZSByZXBlYXRl ZCBtb250aCBuYW1lcyBvbiB0aGUgMzFzdCBvZiBzb21lIG1vbnRocyA6LVwNCgkJaWYgKCEk dGhpcy0+dXNlU2VsZWN0b3IoJ3dlZWsnKSkgew0KCQkJaWYgKCR0aGlzLT51c2VTZWxlY3Rv cignbW9udGgnKSAmJiAhJHN0YXRpYykgew0KCQkJCWZvciAoICRpZHggPSAxOyAkaWR4IDw9 IDEyOyAkaWR4KysgKSB7DQoJCQkJCSR0YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsN CgkJCQkJaWYgKCAkaWR4ID09ICRjdXJybW8gKSAkdGFnYXR0cyAuPSAnIHNlbGVjdGVkPSJz ZWxlY3RlZCInOw0KCQkJCQkkb3B0aW9udGFnc1tdID0gZG9UYWcoJHRoaXMtPnNlbHBmeFsn bW9udGgnXS4oKGlzX2FycmF5KCR0aGlzLT5tdGhOYW1lRm10KSkgPyAkdGhpcy0+bXRoTmFt ZXNbZGF0ZSgnbicsbWt0aW1lKDEyLDAsMCwkaWR4LDEpKV0gOiBzYWZlX3N0cmZ0aW1lKCR0 aGlzLT5tdGhOYW1lRm10LCBta3RpbWUoMTIsMCwwLCRpZHgsMSkgKSkuJHRoaXMtPnNlbHNm eFsnbW9udGgnXSwgJ29wdGlvbicsICcnLCAkdGFnYXR0cyk7DQoJCQkJfQ0KCQkJCSRzZWxl Y3RvcltdID0gZG9UYWcoam9pbihuLCAkb3B0aW9udGFncyksICdzZWxlY3QnLCAoKCR0aGlz LT5teXdyYXB0YWcpID8gJycgOiAkdGhpcy0+bXljbGFzcyksICcgbmFtZT0iJy4kdGhpcy0+ cmVtYXBbJ20nXS4nIicuKCgkdGhpcy0+c2VsYnRuKSA/ICcnIDogJyBvbmNoYW5nZT0ic3Vi bWl0KCkiJyksICcnKQ0KCSAgIAkJCQkuICgoJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykp ID8gJycgOiBoSW5wdXQoJHRoaXMtPnJlbWFwWyd5J10sICRjdXJyeXIpKTsNCgkJCQkkb3B0 aW9udGFncyA9IGFycmF5KCk7IC8vIEJsYW5rIG91dA0KCQkJfSBlbHNlIHsNCgkJCQkkc2Vs ZWN0b3JbXSA9IGRvVGFnKCR0aGlzLT5nZXRNb250aE5hbWUoKSwgJ3NwYW4nLCAoKCR0aGlz LT5teXdyYXB0YWcpID8gJycgOiAkdGhpcy0+bXljbGFzcykpOw0KCQkJfQ0KCQl9DQoNCgkJ Ly8gWWVhciBzZWxlY3QgbGlzdA0KCQkkeTAgPSAkdGhpcy0+ZXlyOw0KCQkkeTEgPSAkdGhp cy0+bHlyOw0KCQlpZiAoJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykgJiYgKCR5MCAhPSAk eTEpICYmICEkc3RhdGljKSB7DQoJCQlmb3IgKCAkaWR4ID0gJHkwOyAkaWR4IDw9ICR5MTsg JGlkeCsrICkgew0KCQkJCSR0YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsNCgkJCQlp ZiAoICRpZHggPT0gJGN1cnJ5ciApICR0YWdhdHRzIC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVk Iic7DQoJCQkJJG9wdGlvbnRhZ3NbXSA9IGRvVGFnKCR0aGlzLT5zZWxwZnhbJ3llYXInXS4k aWR4LiR0aGlzLT5zZWxzZnhbJ3llYXInXSwgJ29wdGlvbicsICcnLCAkdGFnYXR0cyk7DQoJ CQl9DQoJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKGpvaW4obiwgJG9wdGlvbnRhZ3MpLCAnc2Vs ZWN0JywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDogJHRoaXMtPm15Y2xhc3MpLCAnIG5h bWU9IicuJHRoaXMtPnJlbWFwWyd5J10uJyInLigoJHRoaXMtPnNlbGJ0bikgPyAnJyA6ICcg b25jaGFuZ2U9InN1Ym1pdCgpIicpLCAnJykNCgkJCQkJLiAoKCR0aGlzLT51c2VTZWxlY3Rv cignbW9udGgnKSB8fCAkdGhpcy0+dXNlU2VsZWN0b3IoJ3dlZWsnKSkgPyAnJyA6IGhJbnB1 dCgkdGhpcy0+cmVtYXBbJ20nXSwgJGN1cnJtbykpOw0KCQl9IGVsc2Ugew0KCQkJJHNlbGVj dG9yW10gPSBkb1RhZygkY3VycnlyLCAnc3BhbicsICgoJHRoaXMtPm15d3JhcHRhZykgPyAn JyA6ICR0aGlzLT5teWNsYXNzKSk7DQoJCX0NCg0KCQkkcmVxdWVzdCA9IHNlcnZlclNldCgn UkVRVUVTVF9VUkknKTsNCgkJJHJlZGlyZWN0ID0gc2VydmVyU2V0KCdSRURJUkVDVF9VUkwn KTsNCgkJaWYgKCFlbXB0eSgkcmVkaXJlY3QpICYmICgkcmVxdWVzdCAhPSAkcmVkaXJlY3Qp ICYmIGlzX2NhbGxhYmxlKCdfbDEwbl9zZXRfYnJvd3NlX2xhbmd1YWdlJykpIHsNCgkJCS8v IE1MUCBpbiBkYSBob3VzZTogdXNlIHRoZSByZWRpcmVjdCBVUkwgaW5zdGVhZA0KCQkJJHJl cXVlc3QgPSAkcmVkaXJlY3Q7DQoJCX0NCgkJJHVybHAgPSBwYXJzZV91cmwoJHJlcXVlc3Qp Ow0KCQkkYWN0aW9uID0gJHVybHBbJ3BhdGgnXTsNCg0KCQlpZiAoJHBlcm1saW5rX21vZGUg PT0gJ21lc3N5Jykgew0KCQkJJG91dCA9IG1ha2VPdXQoJ2lkJywncycsJ2MnLCdxJywncGcn LCdwJywnbW9udGgnKTsNCgkJCWZvcmVhY2goJG91dCBhcyAka2V5ID0+ICR2YWwpIHsNCgkJ CQlpZiAoJHZhbCkgew0KCQkJCQkkZmlsdGVyc1tdID0gJGtleS4nPScuJHZhbDsNCgkJCQkJ JGZpbHRlckhpZFtdID0gaElucHV0KCRrZXksICR2YWwpOw0KCQkJCX0NCgkJCX0NCgkJfQ0K CQkkZmlsdGVySGlkID0gYXJyYXlfdW5pcXVlKCRmaWx0ZXJIaWQpOw0KCQkkZmlsdGVycyA9 IGFycmF5X3VuaXF1ZSgkZmlsdGVycyk7DQoNCgkJJGV4dHJhcyA9ICcnOw0KCQlpZiAoISRz dGF0aWMgJiYgKCAkdGhpcy0+dXNlU2VsZWN0b3IoJ21vbnRoJykgfHwgJHRoaXMtPnVzZVNl bGVjdG9yKCd5ZWFyJykgKSkgew0KCQkJaWYgKCR0aGlzLT5zZWxidG4pIHsNCgkJCQkkZXh0 cmFzIC49IGRvVGFnKCcnLCAnaW5wdXQnLCAnc21kX2NhbF9pbnB1dCcsICcgdHlwZT0ic3Vi bWl0IiB2YWx1ZT0iJy4kdGhpcy0+c2VsYnRuLiciJyk7DQoJCQl9DQoJCQkkZXh0cmFzIC49 IGpvaW4obiwgJGZpbHRlckhpZCk7DQoJCX0NCg0KCQkkc2VsZWN0b3IgPSAnPGZvcm0gYWN0 aW9uPSInLiRhY3Rpb24uJyIgbWV0aG9kPSJnZXQiJy4oKCRuYXZpZCkgPyAnIGlkPSInLiRu YXZpZC4nIicgOiAnJykuJz4nLmRvVGFnKGpvaW4oc3AsICRzZWxlY3RvcikuJGV4dHJhcywg JHRoaXMtPm15d3JhcHRhZywgJHRoaXMtPm15Y2xhc3MpLic8L2Zvcm0+JzsNCg0KCQkkbmF2 X2JhY2tfbGluayA9ICR0aGlzLT5uYXZpZ2F0aW9uKCRjdXJyeXIsICRjdXJybW8sICctJywg JGZpbHRlcnMsICR1cmxwWydwYXRoJ10pOw0KCQkkbmF2X2Z3ZF9saW5rICA9ICR0aGlzLT5u YXZpZ2F0aW9uKCRjdXJyeXIsICRjdXJybW8sICcrJywgJGZpbHRlcnMsICR1cmxwWydwYXRo J10pOw0KDQoJCSRuYXZfYmFjayA9ICghJHN0YXRpYyAmJiAkbmF2X2JhY2tfbGluaykgPyAn PGEgaHJlZj0iJy4kbmF2X2JhY2tfbGluay4nIicuJG5hdnBjbGFzcy4nPicuJG5hdnBhcnJv dy4nPC9hPicgOiAnJm5ic3A7JzsNCgkJJG5hdl9md2QgID0gKCEkc3RhdGljICYmICRuYXZf ZndkX2xpbmspID8gJzxhIGhyZWY9IicuJG5hdl9md2RfbGluay4nIicuJG5hdm5jbGFzcy4n PicuJG5hdm5hcnJvdy4nPC9hPicgOiAnJm5ic3A7JzsNCg0KCQkkY1tdID0gZG9UYWcoJG5h dl9iYWNrLCd0aCcpOw0KCQkkY1tdID0gJzx0aCBjb2xzcGFuPSInLigoJHRoaXMtPnNob3dJ U09XZWVrKSA/IDYgOiA1KS4nIj4nLiRzZWxlY3Rvci4nPC90aD4nOw0KCQkkY1tdID0gZG9U YWcoJG5hdl9md2QsJ3RoJyk7DQoNCgkJcmV0dXJuIGRvVGFnKGpvaW4oJycsJGMpLCd0cics ICdzbWRfY2FsX25hdnJvdycpOw0KCX0NCg0KCWZ1bmN0aW9uIG5hdmlnYXRpb24oJHllYXIs JG1vbnRoLCRkaXJlY3Rpb24sJGZsdCwkdXJsPScnKSB7DQoJCWdsb2JhbCAkcGVybWxpbmtf bW9kZTsNCg0KCQlpZigkZGlyZWN0aW9uID09ICctJykgew0KCQkJaWYoJG1vbnRoIC0gMSA8 IDEpIHsNCgkJCQkkbW9udGggPSAxMjsNCgkJCQkkeWVhciAtPSAxOw0KCQkJfSBlbHNlIHsN CgkJCQkkbW9udGggLT0gMTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCWlmKCRtb250aCArIDEg PiAxMikgew0KCQkJCSRtb250aCA9IDE7DQoJCQkJJHllYXIgKz0gMTsNCgkJCX0gZWxzZSB7 DQoJCQkJJG1vbnRoICs9IDE7DQoJCQl9DQoJCX0NCg0KCQkvLyBBYm9ydCBpZiB3ZSdyZSBh Ym91dCB0byBnbyBvdXQgb2YgcmFuZ2UNCgkJaWYgKCR5ZWFyIDwgJHRoaXMtPmV5ciB8fCAk eWVhciA+ICR0aGlzLT5seXIpIHsNCgkJCXJldHVybiAnJzsNCgkJfQ0KDQoJCSRmbHRbXSA9 ICR0aGlzLT5yZW1hcFsnbSddLiI9JG1vbnRoIjsNCgkJJGZsdFtdID0gJHRoaXMtPnJlbWFw Wyd5J10uIj0keWVhciI7DQoNCgkJcmV0dXJuICR1cmwgLiAiPyIgLiBqb2luKGEsICRmbHQp Ow0KCX0NCn0NCg0KLyoqDQoqIEJhc2ljIENhbGVuZGFyIGRhdGEgYW5kIGRpc3BsYXkNCiog aHR0cDovL3d3dy5vc2Nhcm0ub3JnL3N0YXRpYy9wZy9jYWxlbmRhckNsYXNzLw0KKiBAYXV0 aG9yIE9zY2FyIE1lcmlkYQ0KKiBAY3JlYXRlZCBKYW4gMTggMjAwNA0KKi8NCmNsYXNzIFNN RF9SYXdfQ2FsZW5kYXIgew0KdmFyICRnbXQgPSAxLCAkbGFuZywgJGRlYnVnID0gMDsNCnZh ciAkeWVhciwgJGV5ciwgJGx5ciwgJG1vbnRoLCAkd2VlazsNCnZhciAkZGF5TmFtZUZtdCwg JG10aE5hbWVGbXQsICRkYXlOYW1lcywgJG10aE5hbWVzLCAkc3RhcnREYXksICRlbmREYXks ICRmaXJzdERheU9mV2VlayA9IDAsICRzdGFydE9mZnNldCA9IDA7DQp2YXIgJHNlbGVjdG9y cywgJHNlbGJ0biwgJHNlbHBmeCwgJHNlbHNmeDsNCnZhciAkc2hvd0lTT1dlZWssICRJU09X ZWVrSGVhZCwgJElTT1dlZWtDZWxsOw0KdmFyICRjbHNfbGV2LCAkY2xzX3BmeCwgJGZvcHRz Ow0KdmFyICRldndyYXB0YWcsICRteXdyYXB0YWc7DQp2YXIgJHJvd2NsYXNzLCAkY2VsbGNs YXNzLCAkZW1wdHljbGFzcywgJGlzb2NsYXNzLCAkbXljbGFzcywgJHRhYmxlSUQsICR0YmxT dW1tYXJ5LCAkdGJsQ2FwdGlvbjsNCnZhciAkbmF2cGNsYXNzLCAkbmF2bmNsYXNzLCAkbmF2 cGFycm93LCAkbmF2bmFycm93LCAkbmF2aWQ7DQp2YXIgJGhvbGlkYXlzLCAkY2VsbGZvcm0s ICRoZHJmb3JtLCAkbWFpbnRhaW4sICRyZW1hcDsNCi8qKg0KKiBDb25zdHJ1Y3Rvcg0KKg0K KiBAcGFyYW0gaW50ZWdlciwgeWVhcg0KKiBAcGFyYW0gaW50ZWdlciwgbW9udGgNCiogQHJl dHVybiBvYmplY3QNCiogQHB1YmxpYw0KKi8NCmZ1bmN0aW9uIFNNRF9SYXdfQ2FsZW5kYXIg KCR5ciwgJG1vLCAkZGVidWc9MCkgew0KCSR0aGlzLT5zZXREZWJ1ZygkZGVidWcpOw0KCSR0 aGlzLT5zZXRZZWFyKCR5cik7DQoJJHRoaXMtPnNldE1vbnRoKCRtbyk7DQoJJHRoaXMtPnNl dENsYXNzUHJlZml4KCdzbWRfY2FsXycpOw0KDQoJJHRoaXMtPnN0YXJ0VGltZSA9IHN0cnRv dGltZSggIiR5ci0kbW8tMDEgMDA6MDAiICk7DQoJJHRoaXMtPnN0YXJ0RGF5ID0gZGF0ZSgg J0QnLCAkdGhpcy0+c3RhcnRUaW1lICk7DQoJJHRoaXMtPmVuZERheSA9IGRhdGUoICd0Jywg JHRoaXMtPnN0YXJ0VGltZSApOw0KCSR0aGlzLT5lbmRUaW1lID0gc3RydG90aW1lKCAiJHly LSRtby0iLiR0aGlzLT5lbmREYXkuIiAyMzo1OTo1OSIgKTsNCglpZiAoJHRoaXMtPmRlYnVn KSB7DQoJCWVjaG8gIisrIFRISVMgTU9OVEgnUyBSRU5ERVJFRCBDQUxFTkRBUiBbIHN0YXJ0 IHN0YW1wIC8vIGVuZCBkYXRlIC8vIHN0YXJ0IGRheSAvLyBlbmQgc3RhbXAgLy8gZW5kIGRh dGUgLy8gZW5kIGRheSBudW1iZXIgXSArKyI7DQoJCWRtcCgkdGhpcy0+c3RhcnRUaW1lLCBk YXRlKCdZLW0tZCBIOmk6cycsICR0aGlzLT5zdGFydFRpbWUpLCAkdGhpcy0+c3RhcnREYXks ICR0aGlzLT5lbmRUaW1lLCBkYXRlKCdZLW0tZCBIOmk6cycsICR0aGlzLT5lbmRUaW1lKSwg JHRoaXMtPmVuZERheSk7DQoJfQ0KCSR0aGlzLT5zZXROYW1lRm9ybWF0KCclYScsICdkJyk7 DQoJJHRoaXMtPnNldE5hbWVGb3JtYXQoJyVCJywgJ20nKTsNCgkkdGhpcy0+c2V0Rmlyc3RE YXlPZldlZWsoMCk7DQoJJHRoaXMtPnNldFNob3dJU09XZWVrKCcnKTsNCgkkdGhpcy0+c2V0 VGFibGVJRCgnJyk7DQoJJHRoaXMtPnNldFRhYmxlQ2xhc3MoJycpOw0KfQ0KLy8gPT09IGVu ZCBDYWxlbmRhciA9PT0NCi8vIEdldHRlcnMNCmZ1bmN0aW9uIHVzZVNlbGVjdG9yKCR2YWwp IHsgcmV0dXJuIGluX2FycmF5KCR2YWwsICR0aGlzLT5zZWxlY3RvcnMpOyB9DQpmdW5jdGlv biBnZXREYXlOYW1lKCRkYXkpIHsgcmV0dXJuICgkdGhpcy0+ZGF5TmFtZXNbJGRheSU3XSk7 IH0NCmZ1bmN0aW9uIGdldE1vbnRoTmFtZSgpIHsNCglpZiAoaXNfYXJyYXkoJHRoaXMtPm10 aE5hbWVGbXQpKSB7DQoJCXJldHVybiAkdGhpcy0+bXRoTmFtZXNbZGF0ZSgnbicsJHRoaXMt PnN0YXJ0VGltZSldOw0KCX0gZWxzZSB7DQoJCXJldHVybiBzdHJmdGltZSgkdGhpcy0+bXRo TmFtZUZtdCwgJHRoaXMtPnN0YXJ0VGltZSk7DQoJfQ0KfQ0KZnVuY3Rpb24gZ2V0TmF2SW5m bygkdHlwZSkgew0KCSRyID0gJyc7DQoJc3dpdGNoICgkdHlwZSkgew0KCQljYXNlICJpZCI6 ICRyID0gJHRoaXMtPm5hdmlkOyBicmVhazsNCgkJY2FzZSAicGMiOiAkciA9ICR0aGlzLT5u YXZwY2xhc3M7IGJyZWFrOw0KCQljYXNlICJuYyI6ICRyID0gJHRoaXMtPm5hdm5jbGFzczsg YnJlYWs7DQoJCWNhc2UgInBhIjogJHIgPSAkdGhpcy0+bmF2cGFycm93OyBicmVhazsNCgkJ Y2FzZSAibmEiOiAkciA9ICR0aGlzLT5uYXZuYXJyb3c7IGJyZWFrOw0KCX0NCglyZXR1cm4g JHI7DQp9DQovLyBTZXR0ZXJzDQpmdW5jdGlvbiBzZXREZWJ1ZygkZCl7ICR0aGlzLT5kZWJ1 ZyA9ICRkOyB9DQpmdW5jdGlvbiBzZXRHTVQoJGIpeyAkdGhpcy0+Z210ID0gJGI7IH0NCmZ1 bmN0aW9uIHNldExhbmcoJGNvZGUpeyAkdGhpcy0+bGFuZyA9ICRjb2RlOyB9DQpmdW5jdGlv biBzZXRTdW1tYXJ5KCR0eHQpeyAkdGhpcy0+dGJsU3VtbWFyeSA9ICR0eHQ7IH0NCmZ1bmN0 aW9uIHNldENhcHRpb24oJHR4dCl7ICR0aGlzLT50YmxDYXB0aW9uID0gJHR4dDsgfQ0KZnVu Y3Rpb24gc2V0Q2VsbEZvcm0oJGZybSl7ICR0aGlzLT5jZWxsZm9ybSA9ICRmcm07IH0NCmZ1 bmN0aW9uIHNldEhkckZvcm0oJGZybSl7ICR0aGlzLT5oZHJmb3JtID0gJGZybTsgfQ0KZnVu Y3Rpb24gc2V0VGFibGVJRCgkaWQpeyAkdGhpcy0+dGFibGVJRCA9ICRpZDsgfQ0KZnVuY3Rp b24gc2V0WWVhcigkeXIpeyAkdGhpcy0+eWVhciA9ICR5cjsgfQ0KZnVuY3Rpb24gc2V0RVll YXIoJHlyKXsgJHRoaXMtPmV5ciA9ICR5cjsgfQ0KZnVuY3Rpb24gc2V0TFllYXIoJHlyKXsg JHRoaXMtPmx5ciA9ICR5cjsgfQ0KZnVuY3Rpb24gc2V0TW9udGgoJG10aCl7ICR0aGlzLT5t b250aCA9IChpbnQpJG10aDsgfQ0KZnVuY3Rpb24gc2V0V2Vlaygkd2spew0KCWlmICgkd2sp IHsNCgkJJHdrID0gc3RyX3BhZCgkd2ssIDIsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJHRo aXMtPndlZWsgPSAkd2s7DQoJCSR0aGlzLT5tb250aCA9IHNhZmVfc3RyZnRpbWUoIiVtIiwg c3RydG90aW1lKCR0aGlzLT55ZWFyLiJXIi4kd2spKTsNCgl9DQp9DQpmdW5jdGlvbiBzZXRO YXZLZWVwKCRhcil7ICR0aGlzLT5tYWludGFpbiA9ICRhcjsgfQ0KZnVuY3Rpb24gc2V0U2hv d0lTT1dlZWsoJHZhbCkgew0KCSR0aGlzLT5zaG93SVNPV2VlayA9ICgkdmFsKSA/IHRydWUg OiBmYWxzZTsNCglpZiAoJHZhbCkgew0KCQkkdmFsID0gZG9fbGlzdCgkdmFsKTsNCgkJJHRo aXMtPklTT1dlZWtIZWFkID0gJHZhbFswXTsNCgkJJHRoaXMtPklTT1dlZWtDZWxsID0gKGlz c2V0KCR2YWxbMV0pKSA/ICR2YWxbMV0gOiAne3dlZWt9JzsNCgl9DQp9DQpmdW5jdGlvbiBz ZXRSZW1hcCgkbWFwKXsgJHRoaXMtPnJlbWFwID0gJG1hcDsgfQ0KZnVuY3Rpb24gc2V0Q2xh c3NMZXZlbHMoJGNscyl7ICR0aGlzLT5jbHNfbGV2ID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0 Q2xhc3NQcmVmaXgoJGNscyl7ICR0aGlzLT5jbHNfcGZ4ID0gJGNsczsgfQ0KZnVuY3Rpb24g c2V0RXZlbnRXcmFwdGFnKCR3cmFwKXsgJHRoaXMtPmV2d3JhcHRhZyA9ICR3cmFwOyB9DQpm dW5jdGlvbiBzZXRNWVdyYXB0YWcoJHdyYXApeyAkdGhpcy0+bXl3cmFwdGFnID0gJHdyYXA7 IH0NCmZ1bmN0aW9uIHNldFRhYmxlQ2xhc3MoJGNscykgeyAkdGhpcy0+dGFibGVjbGFzcyA9 ICgkY2xzKSA/ICR0aGlzLT5jbHNfcGZ4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0Um93 Q2xhc3MoJGNscyl7ICR0aGlzLT5yb3djbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbHNfcGZ4 LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0Q2VsbENsYXNzKCRjbHMpeyAkdGhpcy0+Y2Vs bGNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsc19wZnguJGNscyA6ICcnOyB9DQpmdW5jdGlv biBzZXRFbXB0eUNsYXNzKCRjbHMpeyAkdGhpcy0+ZW1wdHljbGFzcyA9ICgkY2xzKSA/ICR0 aGlzLT5jbHNfcGZ4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0SVNPV2Vla0NsYXNzKCRj bHMpeyAkdGhpcy0+aXNvY2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xzX3BmeC4kY2xzIDog Jyc7IH0NCmZ1bmN0aW9uIHNldE5hdkluZm8oJGNsc3AsICRjbHNuLCAkYXJycCwgJGFycm4s ICRuaWQpew0KCSR0aGlzLT5uYXZwY2xhc3MgPSAoJGNsc3ApID8gJHRoaXMtPmNsc19wZngu JGNsc3AgOiAnJzsNCgkkdGhpcy0+bmF2bmNsYXNzID0gKCRjbHNuKSA/ICR0aGlzLT5jbHNf cGZ4LiRjbHNuIDogJyc7DQoJJHRoaXMtPm5hdnBhcnJvdyA9ICgkYXJycCkgPyAkYXJycCA6 ICcnOw0KCSR0aGlzLT5uYXZuYXJyb3cgPSAoJGFycm4pID8gJGFycm4gOiAnJzsNCgkkdGhp cy0+bmF2aWQgPSAoJG5pZCkgPyAkdGhpcy0+Y2xzX3BmeC4kbmlkIDogJyc7DQp9DQpmdW5j dGlvbiBzZXRNWUNsYXNzKCRjbHMpeyAkdGhpcy0+bXljbGFzcyA9ICgkY2xzKSA/ICR0aGlz LT5jbHNfcGZ4LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0RmlsdGVyT3B0cygkZikgeyAk dGhpcy0+Zm9wdHMgPSAkZjsgfQ0KZnVuY3Rpb24gc2V0SG9saWRheXMoJGhvbHMpIHsgJHRo aXMtPmhvbGlkYXlzID0gJGhvbHM7IH0NCmZ1bmN0aW9uIHNldFNlbGVjdG9ycygkc2VsLCAk YnRuKSB7DQoJZm9yZWFjaCAoJHNlbCBhcyAkaWR4ID0+ICRpdGVtKSB7DQoJCSRzZWxwYXJ0 cyA9IGV4cGxvZGUoIjoiLCAkaXRlbSk7DQoJCSRzZWxbJGlkeF0gPSAkc2VscGFydHNbMF07 DQoJCSR0aGlzLT5zZWxwZnhbJHNlbHBhcnRzWzBdXSA9IChpc3NldCgkc2VscGFydHNbMV0p KSA/ICRzZWxwYXJ0c1sxXSA6ICcnOw0KCQkkdGhpcy0+c2Vsc2Z4WyRzZWxwYXJ0c1swXV0g PSAoaXNzZXQoJHNlbHBhcnRzWzJdKSkgPyAkc2VscGFydHNbMl0gOiAnJzsNCgl9DQoJJHRo aXMtPnNlbGVjdG9ycyA9ICRzZWw7DQoJJHRoaXMtPnNlbGJ0biA9ICRidG47DQp9DQpmdW5j dGlvbiBzZXRGaXJzdERheU9mV2VlaygkZCkgew0KCSR0aGlzLT5maXJzdERheU9mV2VlayA9 ICgoaW50KSRkIDw9IDYgYW5kIChpbnQpJGQgPj0gMCkgPyAoaW50KSRkIDogMDsNCgkkdGhp cy0+c3RhcnRPZmZzZXQgPSBkYXRlKCd3JywgJHRoaXMtPnN0YXJ0VGltZSkgLSAkdGhpcy0+ Zmlyc3REYXlPZldlZWs7DQoJaWYgKCAkdGhpcy0+c3RhcnRPZmZzZXQgPCAwICkgew0KCQkk dGhpcy0+c3RhcnRPZmZzZXQgPSA3IC0gYWJzKCR0aGlzLT5zdGFydE9mZnNldCk7DQoJfQ0K fQ0KLyoqDQoqIGZybTogYW55IHZhbGlkIFBIUCBzdHJmdGltZSgpIHN0cmluZyBvciBBQkJS L0ZVTEwNCiogdHlwOiBkIHRvIHNldCBkYXksIG0gdG8gc2V0IG1vbnRoIGZvcm1hdA0KKi8N CmZ1bmN0aW9uIHNldE5hbWVGb3JtYXQoJGZybSwgJHR5cD0iZCIpIHsNCglzd2l0Y2ggKCRm cm0pIHsNCgkJY2FzZSAiZnVsbCI6DQoJCWNhc2UgIkZVTEwiOg0KCQkJJGZtdCA9ICgkdHlw ID09ICdkJykgPyAiJUEiIDogIiVCIjsNCgkJCWJyZWFrOw0KCQljYXNlICJhYmJyIjoNCgkJ Y2FzZSAiQUJCUiI6DQoJCQkkZm10ID0gKCR0eXAgPT0gJ2QnKSA/ICIlYSIgOiAiJWIiOw0K CQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQlpZiAoc3RycG9zKCRmcm0sICclJykgPT09IDAp IHsNCgkJCQkkZm10ID0gJGZybTsNCgkJCX0gZWxzZSB7DQoJCQkJJGZybSA9IHRyaW0oJGZy bSwgJ3t9Jyk7DQoJCQkJJGZybSA9IGRvX2xpc3QoJGZybSk7DQoJCQkJJGZtdCA9ICRmcm07 DQoJCQl9DQoJCQlicmVhazsNCgl9DQoNCglpZiAoJHR5cCA9PSAiZCIpIHsNCgkJJHRoaXMt PmRheU5hbWVGbXQgPSAkZm10Ow0KCQkkdGhpcy0+ZGF5TmFtZXMgPSBhcnJheSgpOw0KDQoJ CS8vIFRoaXMgaXMgZG9uZSB0byBtYWtlIHN1cmUgU3VuZGF5IGlzIGFsd2F5cyB0aGUgZmly c3QgZGF5IG9mIG91ciBhcnJheQ0KCQkvLyBVbml4IHRpbWUgZ2V0cyBhIGxpdHRsZSBmdW5r eSBhdCB0aGUgYmVnaW5uaW5nIGRlcGVuZGluZyB1cG9uIHRoZSB0aW1lem9uZS4NCgkJJHNl cnZlcm9mZnNldCA9IGdtbWt0aW1lKDAsMCwwKSAtIG1rdGltZSgwLDAsMCk7DQoJCSRzdGFy dCA9ICgkc2VydmVyb2Zmc2V0IDwgMCkgPyA0IDogMzsNCgkJJGVuZCA9ICRzdGFydCArIDc7 DQoJCWZvcigkaT0kc3RhcnQ7ICRpPCRlbmQ7ICRpKyspIHsNCgkJCWlmIChpc19hcnJheSgk Zm10KSkgew0KCQkJCSR0aGlzLT5kYXlOYW1lc1tdID0gJGZtdFskaS0kc3RhcnRdOw0KCQkJ fSBlbHNlIHsNCgkJCQkkdGhpcy0+ZGF5TmFtZXNbXSA9IHVjZmlyc3Qoc3RyZnRpbWUoJGZt dCwgODY0MDAqJGkpKTsNCgkJCX0NCgkJfQ0KCX0gZWxzZSB7DQoJCSR0aGlzLT5tdGhOYW1l Rm10ID0gJGZtdDsNCgkJJHRoaXMtPm10aE5hbWVzID0gYXJyYXkoKTsNCgkJZm9yICgkaT0w OyAkaTwxMjsgJGkrKykgew0KCQkJaWYgKGlzX2FycmF5KCRmbXQpKSB7DQoJCQkJJHRoaXMt Pm10aE5hbWVzWyRpKzFdID0gJGZtdFskaV07DQoJCQl9IGVsc2Ugew0KCQkJCSR0aGlzLT5t dGhOYW1lc1skaSsxXSA9IHVjZmlyc3Qoc3RyZnRpbWUoJGZtdCwgODY0MDAqJGkpKTsNCgkJ CX0NCgkJfQ0KCX0NCn0NCi8qKg0KKiBSZXR1cm4gbWFya3VwIGZvciBkaXNwbGF5aW5nIHRo ZSBjYWxlbmRhci4NCiogQHJldHVybg0KKiBAcHVibGljDQoqLw0KZnVuY3Rpb24gZGlzcGxh eSAoICkgew0KCSRpZCA9ICgkdGhpcy0+dGFibGVJRCkgPyAnIGlkPSInLiR0aGlzLT50YWJs ZUlELiciJyA6ICcnOw0KCSRjW10gPSAnPHRhYmxlJy4kaWQuJz4nOw0KCSRjW10gPSAnPHRo ZWFkPicgLiAkdGhpcy0+ZHNwRGF5TmFtZXMoKSAuICc8L3RoZWFkPic7DQoJJGNbXSA9ICR0 aGlzLT5kc3BEYXlDZWxscygpOw0KCSRjW10gPSAnPC90YWJsZT4nOw0KDQoJcmV0dXJuIGpv aW4oJycsJGMpOw0KfQ0KLy8gPT09IGVuZCBkaXNwbGF5ID09PQ0KLyoqDQoqIERpc3BsYXlz IHRoZSByb3cgb2YgZGF5IG5hbWVzLg0KKiBAcmV0dXJuIHN0cmluZw0KKiBAcHJpdmF0ZQ0K Ki8NCmZ1bmN0aW9uIGRzcERheU5hbWVzICggKSB7DQoJaWYgKCR0aGlzLT5oZHJmb3JtKSB7 DQoJCSRyZXBzID0gYXJyYXkoDQoJCQkne2ZpcnN0ZGF5fScgPT4gJHRoaXMtPmZpcnN0RGF5 T2ZXZWVrLA0KCQkJJ3tkYXluYW1lc30nID0+IGpvaW4oJywnLCAkdGhpcy0+ZGF5TmFtZXMp LA0KCQkJJ3tpc293ZWVraGVhZH0nID0+ICR0aGlzLT5JU09XZWVrSGVhZCwNCgkJCSd7d2Vl a30nID0+IGRhdGUoJ1cnLCAkdGhpcy0+c3RhcnRUaW1lKSwNCgkJCSd7bW9udGh9JyA9PiBk YXRlKCduJywgJHRoaXMtPnN0YXJ0VGltZSksDQoJCQkne3llYXJ9JyA9PiBkYXRlKCdZJywg JHRoaXMtPnN0YXJ0VGltZSksDQoJCQkne2lzb3llYXJ9JyA9PiBkYXRlKCdvJywgJHRoaXMt PnN0YXJ0VGltZSksDQoJCSk7DQoNCgkJcmV0dXJuIHBhcnNlKHN0cnRyKCR0aGlzLT5oZHJm b3JtLCAkcmVwcykpOw0KCX0gZWxzZSB7DQoJCSRjW10gPSAnPHRyIGNsYXNzPSJzbWRfY2Fs X2RheW5hbWVzIj4nOw0KDQoJCSRpID0gJHRoaXMtPmZpcnN0RGF5T2ZXZWVrOw0KCQkkaiA9 IDA7IC8vIGNvdW50IG51bWJlciBvZiBkYXlzIGRpc3BsYXllZA0KCQkkZW5kID0gZmFsc2U7 DQoNCgkJaWYgKCR0aGlzLT5zaG93SVNPV2Vlaykgew0KCQkJJGNbXSA9ICI8dGg+Ii4kdGhp cy0+SVNPV2Vla0hlYWQuIjwvdGg+IjsNCgkJfQ0KCQlmb3IoJGogPSAwOyAkajw9NjsgJGor KywgJGkrKykgew0KCQkJaWYoJGkgPT0gNykgeyAkaSA9IDA7IH0NCgkJCSRjW10gPSAnPHRo PicuJHRoaXMtPmdldERheU5hbWUoJGkpLiI8L3RoPiI7DQoJCX0NCg0KCQkkY1tdID0gJzwv dHI+JzsNCgkJcmV0dXJuIGpvaW4oJycsJGMpOw0KCX0NCn0NCi8vID09PSBlbmQgZHNwRGF5 TmFtZXMgPT09DQovKioNCiogRGlzcGxheXMgYWxsIGRheSBjZWxscyBmb3IgdGhlIG1vbnRo DQoqDQoqIEByZXR1cm4gc3RyaW5nDQoqIEBwcml2YXRlDQoqLw0KZnVuY3Rpb24gZHNwRGF5 Q2VsbHMgKCApIHsNCgkkaSA9IDA7IC8vIGNlbGwgY291bnRlcg0KCSRlbXB0eUNsYXNzID0g JHRoaXMtPmVtcHR5Y2xhc3M7DQoJJGlzb0NsYXNzID0gJHRoaXMtPmlzb2NsYXNzOw0KCSRy b3dDbGFzcyA9ICR0aGlzLT5yb3djbGFzczsNCgkkcm93Q2xhc3MgPSAoJHJvd0NsYXNzKSA/ ICcgY2xhc3M9IicuJHJvd0NsYXNzLiciJyA6ICcnOw0KDQoJJGNbXSA9ICc8dHInLiRyb3dD bGFzcy4nPic7DQoNCglpZiAoJHRoaXMtPnNob3dJU09XZWVrKSB7DQoJCSRyZXBzID0gYXJy YXkoDQoJCQkne3dlZWt9JyA9PiBkYXRlKCdXJywgJHRoaXMtPnN0YXJ0VGltZSksDQoJCQkn e21vbnRofScgPT4gZGF0ZSgnbicsICR0aGlzLT5zdGFydFRpbWUpLA0KCQkJJ3t5ZWFyfScg PT4gZGF0ZSgnWScsICR0aGlzLT5zdGFydFRpbWUpLA0KCQkJJ3tpc295ZWFyfScgPT4gZGF0 ZSgnbycsICR0aGlzLT5zdGFydFRpbWUpLA0KCQkpOw0KCQkkd2tjZWxsID0gc3RydHIoJHRo aXMtPklTT1dlZWtDZWxsLCAkcmVwcyk7DQoJCSRjW10gPSAnPHRkIGNsYXNzPSInLiRpc29D bGFzcy4nIj4nLiR3a2NlbGwuJzwvdGQ+JzsNCgl9DQoJLy8gZmlyc3QgZGlzcGxheSBlbXB0 eSBjZWxscyBiYXNlZCBvbiB3aGF0IHdlZWtkYXkgdGhlIG1vbnRoIHN0YXJ0cyBpbg0KCWZv ciggJGo9MDsgJGo8JHRoaXMtPnN0YXJ0T2Zmc2V0OyAkaisrICkJew0KCQkkaSsrOw0KCQkk Y1tdID0gJzx0ZCBjbGFzcz0iJy4kZW1wdHlDbGFzcy4nIj4mbmJzcDs8L3RkPic7DQoJfSAv LyBlbmQgb2Zmc2V0IGNlbGxzDQoNCgkvLyB3cml0ZSBvdXQgdGhlIHJlc3Qgb2YgdGhlIGRh eXMsIGF0IGVhY2ggc3VuZGF5LCBzdGFydCBhIG5ldyByb3cuDQoJZm9yKCAkZD0xOyAkZDw9 JHRoaXMtPmVuZERheTsgJGQrKyApIHsNCgkJJGkrKzsNCgkJJGNbXSA9ICR0aGlzLT5kc3BE YXlDZWxsKCAkZCApOw0KCQlpZiAoICRpJTcgPT0gMCApIHsgJGNbXSA9ICc8L3RyPic7IH0N CgkJaWYgKCAkZDwkdGhpcy0+ZW5kRGF5ICYmICRpJTcgPT0gMCApIHsNCgkJCSRjW10gPSAn PHRyJy4kcm93Q2xhc3MuJz4nOw0KCQkJaWYgKCR0aGlzLT5zaG93SVNPV2Vlaykgew0KCQkJ CSR0aGVUaW1lID0gc2FmZV9zdHJ0b3RpbWUoJHRoaXMtPnllYXIuIi0iLiR0aGlzLT5tb250 aC4iLSIuKGludCkoJGQgKyAxKSAuIiAwMDowMCIpOw0KCQkJCSRyZXBzID0gYXJyYXkoDQoJ CQkJCSd7d2Vla30nID0+IGRhdGUoJ1cnLCAkdGhlVGltZSksDQoJCQkJCSd7bW9udGh9JyA9 PiBkYXRlKCduJywgJHRoZVRpbWUpLA0KCQkJCQkne3llYXJ9JyA9PiBkYXRlKCdZJywgJHRo ZVRpbWUpLA0KCQkJCQkne2lzb3llYXJ9JyA9PiBkYXRlKCdvJywgJHRoZVRpbWUpLA0KCQkJ CSk7DQoJCQkJJHdrY2VsbCA9IHN0cnRyKCR0aGlzLT5JU09XZWVrQ2VsbCwgJHJlcHMpOw0K CQkJCSRjW10gPSAnPHRkIGNsYXNzPSInLiRpc29DbGFzcy4nIj4nLiR3a2NlbGwuJzwvdGQ+ JzsNCgkJCX0NCgkJfQ0KCX0NCgkvLyBmaWxsIGluIHRoZSBmaW5hbCByb3cNCgkkbGVmdCA9 IDcgLSAoICRpJTcgKTsNCglpZiAoICRsZWZ0IDwgNykJew0KCQlmb3IgKCAkaj0wOyAkajwk bGVmdDsgJGorKyApCXsNCgkJICAkY1tdID0gJzx0ZCBjbGFzcz0iJy4kZW1wdHlDbGFzcy4n Ij4mbmJzcDs8L3RkPic7DQoJCX0NCgkJJGNbXSA9ICJcblx0PC90cj4iOw0KCX0NCglyZXR1 cm4gJzx0Ym9keT4nIC4gam9pbignJywkYykgLiAnPC90Ym9keT4nOw0KfQ0KLy8gPT09IGVu ZCBkc3BEYXlDZWxscyA9PT0NCi8qKg0KKiBvdXRwdXRzIHRoZSBjb250ZW50cyBmb3IgYSBn aXZlbiBkYXkNCioNCiogQHBhcmFtIGludGVnZXIsIGRheQ0KKiBAYWJzdHJhY3QNCiovDQpm dW5jdGlvbiBkc3BEYXlDZWxsICggJGRheSApIHsNCglyZXR1cm4gJzx0ZD4nLiRkYXkuJzwv dGQ+JzsNCn0NCi8vID09PSBlbmQgZGF5Q2VsbCA9PT0NCn0gLy8gZW5kIGNsYXNzDQoNCmZ1 bmN0aW9uIHNtZF9jYWxfbWluaWxpbmsoJHJvdywgJGRheSwgJG1vbnRoLCAkeWVhciwgJHVz ZV9wb3N0ZWQ9ZmFsc2UpIHsNCglnbG9iYWwgJHBlcm1saW5rX21vZGU7DQoNCgkkbGFuZyA9 ICcnOw0KCSRyZXF1ZXN0ID0gc2VydmVyU2V0KCdSRVFVRVNUX1VSSScpOw0KCSRyZWRpcmVj dCA9IHNlcnZlclNldCgnUkVESVJFQ1RfVVJMJyk7DQoJaWYgKCFlbXB0eSgkcmVkaXJlY3Qp ICYmICgkcmVxdWVzdCAhPSAkcmVkaXJlY3QpICYmIGlzX2NhbGxhYmxlKCdfbDEwbl9zZXRf YnJvd3NlX2xhbmd1YWdlJykpIHsNCgkJLy8gTUxQIGluIGRhIGhvdXNlIHNvIGV4dHJhY3Qg dGhlIGxhbmd1YWdlIGN1cnJlbnRseSBpbiB1c2UgLS0gaXMgdGhlcmUgYW4gTUxQLW5hdGl2 ZSBtZXRob2QgZm9yIHRoaXM/DQoJCSRyZXFwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkcmVxdWVz dCk7DQoJCSRyZWRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkcmVkaXJlY3QpOw0KCQkkbGFuZyA9 IGpvaW4oJycsIGFycmF5X2RpZmYoJHJlZHBhcnRzLCAkcmVxcGFydHMpKSAuICcvJzsNCgl9 DQoNCglpZiggJHBlcm1saW5rX21vZGUgPT0gJ3llYXJfbW9udGhfZGF5X3RpdGxlJyApIHsN CgkJJGxpbmtkYXRlID0gKCR1c2VfcG9zdGVkKSA/IGRhdGUoJ1kvbS9kJywgJHJvd1sndVBv c3RlZCddKSA6ICR5ZWFyLicvJy5zdHJfcGFkKCRtb250aCwyLCIwIixTVFJfUEFEX0xFRlQp LicvJy5zdHJfcGFkKCRkYXksMiwiMCIsU1RSX1BBRF9MRUZUKTsNCgkJJGhyZWYgPSAnIGhy ZWY9IicuaHUuJGxhbmcuJGxpbmtkYXRlLiciJzsNCgl9IGVsc2Ugew0KCQkkbGlua2RhdGUg PSAoJHVzZV9wb3N0ZWQpID8gZGF0ZSgnWS1tLWQnLCAkcm93Wyd1UG9zdGVkJ10pIDogJHll YXIuJy0nLnN0cl9wYWQoJG1vbnRoLDIsIjAiLFNUUl9QQURfTEVGVCkuJy0nLnN0cl9wYWQo JGRheSwyLCIwIixTVFJfUEFEX0xFRlQpOw0KCQkkaHJlZiA9ICcgaHJlZj0iJy5odS4kbGFu Zy4nP2RhdGU9Jy4kbGlua2RhdGU7DQoJCWlmKCRyb3dbJ1NlY3Rpb24nXSkgeyAkaHJlZiA9 ICRocmVmLmEuJ3M9Jy4kcm93WydTZWN0aW9uJ107IH0NCi8vCQlpZigkY2F0ZWdvcnkpIHsg JGhyZWYgPSAkaHJlZi5hLidjPScuJGNhdGVnb3J5OyB9DQoJCSRocmVmIC49ICciJzsNCgl9 DQoNCglyZXR1cm4gdGFnKCRkYXksICdhJywgJGhyZWYpOw0KfQ0KDQovLyBQZXJmb3JtIG9u ZSBvZiB0d28gdHlwZXMgb2YgdGVzdDogYSBmbGFnLWJhc2VkIHRlc3QsIG9yIGFuIGluZm8t YmFzZWQgdGVzdA0KZnVuY3Rpb24gc21kX2lmX2NhbCgkYXR0cywgJHRoaW5nKSB7DQoJZ2xv YmFsICRzbWRfY2FsX2ZsYWcsICRzbWRfY2FsaW5mbywgJHNtZF9kYXRlOw0KDQoJZXh0cmFj dChsQXR0cyhhcnJheSgNCgkJJ2ZsYWcnICAgID0+ICcnLA0KCQknY2FsaWQnICAgPT4gJycs DQoJCSdpc295ZWFyJyA9PiAnJywNCgkJJ3llYXInICAgID0+ICcnLA0KCQknbW9udGgnICAg PT4gJycsDQoJCSd3ZWVrJyAgICA9PiAnJywNCgkJJ2RheScgICAgID0+ICcnLA0KCQknbG9n aWMnICAgPT4gJ29yJywNCgkJJ2RlYnVnJyAgID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJ JGZsYWcgPSBkb19saXN0KCRmbGFnKTsNCgkkY3RyID0gJG51bSA9IDA7DQoNCglpZiAoJGRl YnVnKSB7DQoJCWRtcCgkYXR0cyk7DQoJfQ0KDQoJaWYgKCRmbGFnICYmICRmbGFnWzBdICE9 ICcnKSB7DQoJCSRudW0gKz0gY291bnQoJGZsYWcpOw0KCQlmb3JlYWNoICgkZmxhZyBhcyAk d2hhdG5vdCkgew0KCQkJaWYgKGVtcHR5KCR3aGF0bm90KSkgY29udGludWU7DQoJCQkkY3Ry ICs9IChpbl9hcnJheSgkd2hhdG5vdCwgJHNtZF9jYWxfZmxhZykgfHwgKCR3aGF0bm90ID09 ICdTTURfQU5ZJyAmJiAhZW1wdHkoJHNtZF9jYWxfZmxhZykpKSA/IDEgOiAwOw0KCQl9DQoJ fQ0KCWlmICgkY2FsaWQpIHsNCgkJJG51bSsrOw0KCQkkY3RyICs9ICgkc21kX2NhbGluZm9b J2lkJ10gPT09ICRjYWxpZCkgPyAxIDogMDsNCgl9DQoJZm9yZWFjaCAoYXJyYXkoIml5IiA9 PiAiaXNveWVhciIsICJ5IiA9PiAieWVhciIsICJtIiA9PiAibW9udGgiLCAidyIgPT4gIndl ZWsiLCAiZCIgPT4gImRheSIpIGFzICRpZHggPT4gJHRlc3QpIHsNCgkJJHRlc3RlciA9ICQk dGVzdDsNCgkJJGNvbXBhcmUgPSAkc21kX2RhdGVbJGlkeF07DQoNCgkJaWYgKCR0ZXN0ZXIp IHsNCgkJCSRudW0rKzsNCgkJCXByZWdfbWF0Y2goJy8oWyE9PD5dKyk/KFtcZF0rKS8nLCAk dGVzdGVyLCAkbWF0Y2hlcyk7DQoJCQlpZiAoJGRlYnVnKSB7DQoJCQkJZG1wKCJURVNUIElG OiAiLiAkY29tcGFyZS4gKCgkbWF0Y2hlc1sxXSkgPyAkbWF0Y2hlc1sxXSA6ICc9JykgLiAk bWF0Y2hlc1syXSApOw0KCQkJfQ0KCQkJc3dpdGNoICgkbWF0Y2hlc1sxXSkgew0KCQkJCWNh c2UgIiEiOg0KCQkJCQkkY3RyICs9ICgkY29tcGFyZSE9JG1hdGNoZXNbMl0pID8gMSA6IDA7 DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgIj4iOg0KCQkJCQkkY3RyICs9ICgkY29tcGFyZT4k bWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPj0iOg0KCQkJ CQkkY3RyICs9ICgkY29tcGFyZT49JG1hdGNoZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJyZWFr Ow0KCQkJCWNhc2UgIjwiOg0KCQkJCQkkY3RyICs9ICgkY29tcGFyZTwkbWF0Y2hlc1syXSkg PyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPD0iOg0KCQkJCQkkY3RyICs9ICgk Y29tcGFyZTw9JG1hdGNoZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1 bHQ6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPT0kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJ CQkJYnJlYWs7DQoJCQl9DQoJCX0NCgl9DQoJJHJlc3VsdCA9ICgoJGN0ciA9PT0gJG51bSAm JiAkbG9naWMgPT0gImFuZCIpIHx8ICRjdHIgPiAwICYmICRsb2dpYyA9PSAib3IiKSA/IHRy dWUgOiBmYWxzZTsNCglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAkcmVzdWx0KSk7 DQp9DQoNCi8vIENvbnZlbmllbnQgd3JhcHBlciBmb3Igc21kX2NhbF9pbmZvIHVzZT0iZXZl bnQiDQpmdW5jdGlvbiBzbWRfZXZlbnRfaW5mbygkYXR0cykgew0KCSRhdHRzWyd1c2UnXSA9 ICdldmVudCc7DQoJcmV0dXJuIHNtZF9jYWxfaW5mbygkYXR0cyk7DQp9DQoNCi8vIEdyYWIg YWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBldmVudA0KZnVuY3Rp b24gc21kX2NhbF9pbmZvKCRhdHRzKSB7DQoJZ2xvYmFsICRwcmV0ZXh0LCAkdGhpc2FydGlj bGUsICRzbWRfY2FsX2ZsYWcsICRzbWRfY2FsaW5mbywgJHNtZF9kYXRlLCAkc21kX2V2ZW50 aW5mbzsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSd0eXBlJyAgICAgICAgPT4gJ2Zs YWcnLA0KCQknam9pbicgICAgICAgID0+ICcgJywNCgkJJ2pvaW5fcHJlZml4JyA9PiAnU01E X0FVVE8nLA0KCQknaHRtbCcgICAgICAgID0+IDAsDQoJCSdlc2NhcGUnICAgICAgPT4gJ2h0 bWwnLA0KCQkndXNlJyAgICAgICAgID0+ICdjYWwnLCAvLyAnY2FsJyBmb3IgY2FsZW5kYXIg KHVzZXMgJHNtZF9jYWxpbmZvKSBvciAnZXZlbnQnIGZvciBldmVudCBsaXN0cyAodXNlcyAk c21kX2V2ZW50aW5mbykuIE5vdCBwdWJsaWNhbGx5IGFsdGVyYWJsZQ0KCQknZGVidWcnICAg ICAgID0+IDAsDQoJKSwgJGF0dHMpKTsNCg0KCS8vIFZhbGlkYXRlICR1c2UgYXR0cmlidXRl DQoJJHVzZSA9IChpbl9hcnJheSgkdXNlLCBhcnJheSgnY2FsJywgJ2V2ZW50JykpKSA/ICR1 c2UgOiAnY2FsJzsNCgkkY2FsX2dsb2JhbCA9ICR7J3NtZF8nLiR1c2UuJ2luZm8nfTsNCg0K CWlmICgkZGVidWcgJiYgJHRoaXNhcnRpY2xlKSB7DQoJCWVjaG8gJysrIEV2ZW50IG5hbWUg KysnOw0KCQlkbXAoJHRoaXNhcnRpY2xlWyd0aXRsZSddKTsNCgl9DQoJaWYgKCRkZWJ1ZyAm JiAkY2FsX2dsb2JhbCkgew0KCQllY2hvICcrKyBBdmFpbGFibGUgJy4kdXNlLicgaW5mbyAr Kyc7DQoJCWRtcCgkY2FsX2dsb2JhbCk7DQoJfQ0KDQoJaWYgKCRkZWJ1ZyAmJiAkc21kX2Rh dGUpIHsNCgkJZWNobyAnKysgQXZhaWxhYmxlIGRhdGUgaW5mbyArKyc7DQoJCWRtcCgkc21k X2RhdGUpOw0KCX0NCg0KCWlmICgkZGVidWcgJiYgJHNtZF9jYWxfZmxhZykgew0KCQllY2hv ICcrKyBBdmFpbGFibGUgZmxhZyBpbmZvICsrJzsNCgkJZG1wKCRzbWRfY2FsX2ZsYWcpOw0K CX0NCg0KCS8vIFR5cGU6IDA9ZGF0ZSwgMT1zbWRfY2FsL2V2ZW50aW5mbywgMj1wcmV0ZXh0 LCAzPXRoaXNhcnRpY2xlLCA0KG9yIG90aGVyKT11c2VyIHZhbHVlDQoJJG1hcCA9IGFycmF5 KA0KCQkneWVhcicgPT4gYXJyYXkoMCwgJ3knKSwNCgkJJ2lzb3llYXInID0+IGFycmF5KDAs ICdpeScsICd5JyksDQoJCSdtb250aCcgPT4gYXJyYXkoMCwgJ20nKSwNCgkJJ3dlZWsnID0+ IGFycmF5KDAsICd3JyksDQoJCSdkYXknID0+IGFycmF5KDAsICdkJyksDQoJCSdzZWN0aW9u JyA9PiBhcnJheSgzLCAnJywgJ3MnKSwNCgkJJ2NhdGVnb3J5MScgPT4gYXJyYXkoMywgJycs ICdjJyksDQoJCSdjYXRlZ29yeTInID0+IGFycmF5KDMsICcnLCAnYycpLA0KCQkndGhpc2lk JyA9PiBhcnJheSgzLCAndGhpc2lkJywgJ2lkJyksDQoJCSdhcnRpY2xlJyA9PiBhcnJheSgx LCAnYXJ0aWQnLCAnaWQnKSwNCgkJJ2NhbGlkJyA9PiBhcnJheSgxLCAnaWQnLCAnY2FsaWQn KSwNCgkJJ2NhdGVnb3J5JyA9PiBhcnJheSgyLCAnYycpLA0KCQkncmVhbG5hbWUnID0+IGFy cmF5KDIsICdhdXRob3InKSwNCgkpOw0KCSRqb2luID0gKCRodG1sKSA/IGEgOiAkam9pbjsg Ly8gaHRtbCBtb2RlIGZvcmNlcyBhbXBlcnNhbmQgam9pbg0KCSR0eXBlID0gZG9fbGlzdCgk dHlwZSk7DQoJJHJldCA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHR5cGUgYXMgJGl0ZW0pIHsN CgkJJHB0cyA9IGRvX2xpc3QoJGl0ZW0sICc6Jyk7DQoJCSRpdGVtID0gJHB0c1swXTsNCg0K CQlpZiAoZW1wdHkoJGl0ZW0pKSBjb250aW51ZTsNCgkJLy8gRGVmYXVsdCBodG1sIGlkDQoJ CSRoaWQgPSAoaXNzZXQoJG1hcFskaXRlbV0pKSA/ICgoaXNzZXQoJG1hcFskaXRlbV1bMl0p KSA/ICRtYXBbJGl0ZW1dWzJdIDogJG1hcFskaXRlbV1bMV0pIDogJGl0ZW07DQoJCS8vIFVz ZXItc3BlY2lmaWVkIGh0bWxpZCBvdmVycmlkZXMgaXQNCgkJJGhpZCA9IChjb3VudCgkcHRz KSA+IDEgJiYgIWVtcHR5KCRwdHNbMV0pKSA/ICRwdHNbMV0gOiAkaGlkOw0KCQlpZiAoJGl0 ZW0gPT0gImZsYWciKSB7DQoJCQkkcmV0W10gPSAoKCRqb2luX3ByZWZpeD09IlNNRF9BVVRP IikgPyAkam9pbiA6ICcnKS5qb2luKCRqb2luLCAkc21kX2NhbF9mbGFnKTsNCgkJfSBlbHNl IGlmICgkaXRlbSA9PSAiYXV0aG9yIiB8fCAkaXRlbSA9PSAicmVhbG5hbWUiKSB7DQoJCQkk Y3VycmF1dGhvciA9ICgkdGhpc2FydGljbGUgPT0gTlVMTCkgPyAnJyA6IGF1dGhvcihhcnJh eSgpKTsNCgkJCWlmICgkY3VycmF1dGhvcikgew0KCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8g JGhpZC4nPScgOiAnJykgLiAkY3VycmF1dGhvcjsNCgkJCX0NCgkJfSBlbHNlIGlmICgkaXRl bSA9PSAicyIpIHsNCgkJCSRzZWMgPSAoIWVtcHR5KCRwcmV0ZXh0WydzJ10pKSA/ICRwcmV0 ZXh0WydzJ10gOiAoKGlzc2V0KCRjYWxfZ2xvYmFsWydzJ10pICYmICFlbXB0eSgkY2FsX2ds b2JhbFsncyddKSkgPyAkY2FsX2dsb2JhbFsncyddIDogJycpOw0KCQkJaWYgKCRzZWMpIHsN CgkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDogJycpIC4gJHNlYzsNCgkJCX0N CgkJfSBlbHNlIGlmIChpc3NldCgkbWFwWyRpdGVtXSkpIHsNCgkJCSR0eXAgPSAkbWFwWyRp dGVtXVswXTsNCgkJCSRpZHggPSBlbXB0eSgkbWFwWyRpdGVtXVsxXSkgPyAkaXRlbSA6ICRt YXBbJGl0ZW1dWzFdOw0KCQkJc3dpdGNoICgkdHlwKSB7DQoJCQkJY2FzZSAwOg0KCQkJCQlp ZiAoJHNtZF9kYXRlWyRpZHhdKSB7DQoJCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQu Jz0nIDogJycpIC4gJHNtZF9kYXRlWyRpZHhdOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJ CWNhc2UgMToNCgkJCQkJaWYgKCFlbXB0eSgkY2FsX2dsb2JhbFskaWR4XSkpIHsNCgkJCQkJ CSRyZXRbXSA9ICgoJGh0bWwpID8gJGhpZC4nPScgOiAnJykgLiAkY2FsX2dsb2JhbFskaWR4 XTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlIDI6DQoJCQkJCWlmICghZW1wdHko JHByZXRleHRbJGlkeF0pKSB7DQoJCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0n IDogJycpIC4gJHByZXRleHRbJGlkeF07DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2Fz ZSAzOg0KCQkJCQlpZiAoJHRoaXNhcnRpY2xlICE9IE5VTEwgJiYgaXNzZXQoJHRoaXNhcnRp Y2xlWyRpZHhdKSAmJiAhZW1wdHkoJHRoaXNhcnRpY2xlWyRpZHhdKSkgew0KCQkJCQkJJHJl dFtdID0gKCgkaHRtbCkgPyAkaGlkLic9JyA6ICcnKSAuICR0aGlzYXJ0aWNsZVskaWR4XTsN CgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCX0NCgkJfSBlbHNlIGlmIChhcnJheV9rZXlfZXhp c3RzKCRpdGVtLCAkcHJldGV4dCkpIHsNCgkJCWlmICgkcHJldGV4dFskaXRlbV0pIHsNCgkJ CQkkcmV0W10gPSAoKCRodG1sKSA/ICRoaWQuJz0nIDogJycpIC4gJHByZXRleHRbJGl0ZW1d Ow0KCQkJfQ0KCQl9IGVsc2UgaWYgKGlzc2V0KCRjYWxfZ2xvYmFsWyRpdGVtXSkpIHsNCgkJ CWlmICghZW1wdHkoJGNhbF9nbG9iYWxbJGl0ZW1dKSkgew0KCQkJCSRyZXRbXSA9ICgoJGh0 bWwpID8gJGhpZC4nPScgOiAnJykgLiAkY2FsX2dsb2JhbFskaXRlbV07DQoJCQl9DQoJCX0g ZWxzZSB7DQoJCQlpZiAoJHRoaXNhcnRpY2xlICE9IE5VTEwgJiYgaXNzZXQoJHRoaXNhcnRp Y2xlWyRpdGVtXSkgJiYgIWVtcHR5KCR0aGlzYXJ0aWNsZVskaXRlbV0pKSB7DQoJCQkJJHJl dFtdID0gKCgkaHRtbCkgPyAkaGlkLic9JyA6ICcnKSAuICR0aGlzYXJ0aWNsZVskaXRlbV07 DQoJCQl9DQoJCX0NCgl9DQoJJHJldCA9IGFycmF5X3VuaXF1ZSgkcmV0KTsNCgkkb3V0ID0g KCgkam9pbl9wcmVmaXg9PSJTTURfQVVUTyIpID8gKCgkaHRtbCkgPyAnPycgOiAnJykgOiAk am9pbl9wcmVmaXgpLmpvaW4oJGpvaW4sICRyZXQpOw0KCXJldHVybiAoJGVzY2FwZT09J2h0 bWwnKSA/IGh0bWxzcGVjaWFsY2hhcnMoJG91dCkgOiAkb3V0Ow0KfQ0KDQovLyBSZXR1cm4g YSBmb3JtYXR0ZWQgdGltZXN0YW1wLCB3aXRoIG9wdGlvbmFsICd0aW1lIG5vdycgb3ZlcnJp ZGUNCmZ1bmN0aW9uIHNtZF9jYWxfbm93KCRhdHRzKSB7DQoJZ2xvYmFsICRkYXRlZm9ybWF0 Ow0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2Zvcm1hdCcgPT4gJGRhdGVmb3JtYXQs DQoJCSdub3cnICAgID0+ICcnLA0KCQknb2Zmc2V0JyA9PiAnJywNCgkJJ2dtdCcgICAgPT4g JycsDQoJCSdsYW5nJyAgID0+ICcnLA0KCSksICRhdHRzKSk7DQoNCgkkdGhlRGF5ID0gKGdw cygnZCcpICYmIGlzX251bWVyaWMoZ3BzKCdkJykpKSA/IChpbnQpZ3BzKCdkJykgOiBzYWZl X3N0cmZ0aW1lKCclZCcpOw0KCSR0aGVNb250aCA9IChncHMoJ20nKSAmJiBpc19udW1lcmlj KGdwcygnbScpKSkgPyAoaW50KWdwcygnbScpIDogc2FmZV9zdHJmdGltZSgnJW0nKTsNCgkk dGhlWWVhciA9IChncHMoJ3knKSAmJiBpc19udW1lcmljKGdwcygneScpKSkgPyAoaW50KWdw cygneScpIDogc2FmZV9zdHJmdGltZSgnJVknKTsNCglpZiAoJG5vdykgew0KCQkkbm93ID0g c3RyX3JlcGxhY2UoIj9tb250aCIsIGRhdGUoJ0YnLCBta3RpbWUoMTIsMCwwLCR0aGVNb250 aCwkdGhlRGF5LCR0aGVZZWFyKSksICRub3cpOw0KCQkkbm93ID0gc3RyX3JlcGxhY2UoIj95 ZWFyIiwgJHRoZVllYXIsICRub3cpOw0KCQkkbm93ID0gc3RyX3JlcGxhY2UoIj9kYXkiLCAk dGhlRGF5LCAkbm93KTsNCgkJJG5vdyA9IGlzX251bWVyaWMoJG5vdykgPyAkbm93IDogc3Ry dG90aW1lKCRub3cpOw0KCX0gZWxzZSB7DQoJCSRub3cgPSB0aW1lKCk7DQoJfQ0KDQoJaWYg KCRvZmZzZXQpIHsNCgkJJG5vdyA9IHN0cnRvdGltZSgkb2Zmc2V0LCAkbm93KTsNCgl9DQoN CgkkZm9ybWF0ID0gc21kX2NhbF9yZWZvcm1hdF93aW4oJGZvcm1hdCwgJG5vdyk7DQoJcmV0 dXJuIHNhZmVfc3RyZnRpbWUoJGZvcm1hdCwgJG5vdywgJGdtdCwgJGxhbmcpOw0KfQ0KDQov LyBTZXQgdXNlci1kZWZpbmVkIGNsYXNzZXMgZm9yIGEgY2VsbA0KZnVuY3Rpb24gc21kX2Nh bF9jbGFzcygkYXR0cykgew0KCWdsb2JhbCAkc21kX2NhbF91Y2xzOw0KDQoJZXh0cmFjdChs QXR0cyhhcnJheSgNCgkJJ25hbWUnID0+ICcnLA0KCSksICRhdHRzKSk7DQoNCgkkbmFtZSA9 IGRvX2xpc3QoJG5hbWUpOw0KCSRzbWRfY2FsX3VjbHMgPSBhcnJheV9tZXJnZSgkc21kX2Nh bF91Y2xzLCAkbmFtZSk7DQp9DQoNCi8vIDx0eHA6YXJ0aWNsZV9jdXN0b20gLz4gcmVwbGFj ZW1lbnQoaXNoKSB0YWcgdGhhdCB1bmRlcnN0YW5kcyBob3cgdG8gaGFuZGxlIHJlY3Vycmlu ZyBldmVudHMNCmZ1bmN0aW9uIHNtZF9hcnRpY2xlX2V2ZW50KCRhdHRzLCAkdGhpbmc9TlVM TCkgew0KCWdsb2JhbCAkcHJlZnMsICRwcmV0ZXh0LCAkdGhpc3BhZ2UsICR0aGlzYXJ0aWNs ZSwgJHNtZF9ldmVudGluZm8sICRzbWRfY2FsX2ZsYWcsICRzbWRfZGF0ZTsNCg0KCWV4dHJh Y3QobEF0dHMoYXJyYXkoDQoJCSd0aW1lJyAgICAgICAgPT4gJ2FueScsDQoJCSd0eXBlJyAg ICAgICAgPT4gJ3N0YW5kYXJkLHJlY3VyLG11bHRpJywNCgkJJ2V4cGlyZWQnICAgICA9PiAn JywNCgkJJ2lkJyAgICAgICAgICA9PiAnJywNCgkJJ2NhdGVnb3J5JyAgICA9PiAnJywNCgkJ J3NlY3Rpb24nICAgICA9PiAnJywNCgkJJ2F1dGhvcicgICAgICA9PiAnJywNCgkJJ3JlYWxu YW1lJyAgICA9PiAnJywNCgkJJ2N1c3RvbScgICAgICA9PiAnJywNCgkJJ3N0YXR1cycgICAg ICA9PiAnbGl2ZScsDQoJCSdwYXJhbV9kZWxpbScgPT4gJzonLA0KCQknc29ydCcgICAgICAg ID0+ICcnLA0KCQknZm9ybScgICAgICAgID0+ICcnLA0KCQknc3RlcGZpZWxkJyAgID0+ICcn LA0KCQknc2tpcGZpZWxkJyAgID0+ICcnLA0KCQknb21pdGZpZWxkJyAgID0+ICcnLA0KCQkn ZXh0cmFmaWVsZCcgID0+ICcnLA0KCQknYWxsc3Bhbm5lZCcgID0+ICcwJywNCgkJJ2RhdGVm aWVsZHMnICA9PiAnJywNCgkJJ21vbnRoJyAgICAgICA9PiAnJywNCgkJJ2Zyb20nICAgICAg ICA9PiAnJywNCgkJJ3RvJyAgICAgICAgICA9PiAnJywNCgkJJ29mZnNldCcgICAgICA9PiAw LA0KCQknbGltaXQnICAgICAgID0+ICcxMCcsDQoJCSdldmVudGxpbWl0JyAgPT4gJzEwJywN CgkJJ3BhZ2luZycgICAgICA9PiAnMScsDQoJCSdwYWdlYnknICAgICAgPT4gJycsDQoJCSdw Z29ubHknICAgICAgPT4gJycsDQoJCSd3cmFwdGFnJyAgICAgPT4gJycsDQoJCSdicmVhaycg ICAgICAgPT4gJycsDQoJCSdjbGFzcycgICAgICAgPT4gJycsDQoJCSdkZWJ1ZycgICAgICAg PT4gMCwNCgkpLCAkYXR0cykpOw0KDQoJLy8gUGhhc2UgMSBmaWx0ZXJzDQoJJGZpbHRTUUwg PSAkc3ViU1FMID0gYXJyYXkoKTsNCglpZigkY2F0ZWdvcnkpIHsNCgkJJHRtcCA9IGRvUXVv dGUoam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRjYXRlZ29yeSkpKSk7DQoJCSRmaWx0 U1FMW10gPSAnKCBDYXRlZ29yeTEgSU4gKCcuJHRtcC4nKSBPUiBDYXRlZ29yeTIgSU4gKCcu JHRtcC4nKSApJzsNCgl9DQoJaWYoJHNlY3Rpb24pIHsNCgkJJGZpbHRTUUxbXSA9ICdTZWN0 aW9uIElOICgnLmRvUXVvdGUoam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRzZWN0aW9u KSkpKS4nKSc7DQoJfQ0KCWlmKCRyZWFsbmFtZSkgew0KCQkkYXV0aG9ycyA9IHNhZmVfY29s dW1uKCduYW1lJywgJ3R4cF91c2VycycsICdSZWFsTmFtZSBJTiAoJy4gZG9RdW90ZShqb2lu KCInLCciLCBkb0FycmF5KGRvX2xpc3QoJHJlYWxuYW1lKSwgJ3VybGRlY29kZScpKSkgLicp JyApOw0KCQkkYXV0aG9yID0gam9pbignLCcsICRhdXRob3JzKTsNCgl9DQoJaWYoJGF1dGhv cikgew0KCQkkZmlsdFNRTFtdID0gJ0F1dGhvcklEIElOICgnLmRvUXVvdGUoam9pbigiJywn IiwgZG9TbGFzaChkb19saXN0KCRhdXRob3IpKSkpLicpJzsNCgl9DQoJaWYoJGlkKSB7DQoJ CSRmaWx0U1FMW10gPSAnSUQgSU4gKCcuam9pbignLCcsIGFycmF5X21hcCgnaW50dmFsJywg ZG9fbGlzdCgkaWQpKSkuJyknOw0KCX0NCglpZigkY3VzdG9tKSB7DQoJCSRjdXN0cyA9IGRv X2xpc3QoJGN1c3RvbSk7DQoJCSR2YWxpZE9wcyA9IGFycmF5KCc9JywgJyE9JywgJz4nLCAn Pj0nLCAnPCcsICc8PScsICdsaWtlJywgJ25vdCcsICdub3QgbGlrZScpOw0KCQlmb3JlYWNo ICgkY3VzdHMgYXMgJHNldCkgew0KCQkJaWYgKHN0cnBvcygkc2V0LCAkcGFyYW1fZGVsaW0p ICE9PSBmYWxzZSkgew0KCQkJCSRjbGF1c2VPcHRzID0gZG9fbGlzdCgkc2V0LCAkcGFyYW1f ZGVsaW0pOw0KCQkJCSRmbGQgPSAkY2xhdXNlT3B0c1swXTsNCgkJCQkkb3BlciA9ICgoY291 bnQoJGNsYXVzZU9wdHMpID09IDMpICYmIChpbl9hcnJheShzdHJ0b2xvd2VyKCRjbGF1c2VP cHRzWzFdKSwgJHZhbGlkT3BzKSkpID8gJGNsYXVzZU9wdHNbMV0gOiAnPSc7DQoJCQkJJGNs YXVzZSA9IChjb3VudCgkY2xhdXNlT3B0cykgPT0gMykgPyAkY2xhdXNlT3B0c1syXSA6ICgo Y291bnQoJGNsYXVzZU9wdHMpID09IDIpID8gJGNsYXVzZU9wdHNbMV0gOiAnJyk7DQoJCQkJ JGZpbHRTUUxbXSA9ICRmbGQgLiAiICRvcGVyICIgLiBkb1F1b3RlKGRvU2xhc2goJGNsYXVz ZSkpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJJHR5cGUgPSBkb19saXN0KCR0eXBlKTsNCgkkcGFn ZWJ5ID0gKGVtcHR5KCRwYWdlYnkpID8gJGxpbWl0IDogJHBhZ2VieSk7DQoNCglmb3JlYWNo ICgkdHlwZSBhcyAkZXZ0eXApIHsNCgkJc3dpdGNoKCRldnR5cCkgew0KCQkJY2FzZSAnc3Rh bmRhcmQnOg0KCQkJCWlmICgkc3RlcGZpZWxkKSB7DQoJCQkJCSRzdWJTUUxbXSA9ICIoIi4k c3RlcGZpZWxkLiIgPSAnJyBBTkQgRXhwaXJlcyA9ICIuTlVMTERBVEVUSU1FLiIpIjsNCgkJ CQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICdyZWN1cic6DQoJCQkJaWYgKCRzdGVwZmllbGQp IHsNCgkJCQkJJHN1YlNRTFtdID0gIigiLiRzdGVwZmllbGQuIiAhPSAnJykiOw0KCQkJCX0N CgkJCQlicmVhazsNCgkJCWNhc2UgJ211bHRpJzoNCgkJCQlpZiAoJHN0ZXBmaWVsZCkgew0K CQkJCQkkc3ViU1FMW10gPSAiKCIuJHN0ZXBmaWVsZC4iID0gJycgQU5EIEV4cGlyZXMgIT0g Ii5OVUxMREFURVRJTUUuIikiOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJfQ0KCX0NCglpZiAo JHN1YlNRTCkgew0KCQkkZmlsdFNRTFtdID0gJygnLmpvaW4oJyBPUiAnLCAkc3ViU1FMKS4n KSc7DQoJfQ0KDQoJJHN0YXR1cyA9ICgkc3RhdHVzKSA/ICRzdGF0dXMgOiAnbGl2ZSc7IC8v IGluIGNhc2Ugc3RhdHVzIGhhcyBiZWVuIGVtcHRpZWQNCgkkc3RhdHVzID0gZG9fbGlzdCgk c3RhdHVzKTsNCgkkc3RhdGkgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRzdGF0dXMgYXMgJHN0 YXQpIHsNCgkJaWYgKGVtcHR5KCRzdGF0KSkgew0KCQkJY29udGludWU7DQoJCX0gZWxzZSBp ZiAoaXNfbnVtZXJpYygkc3RhdCkpIHsNCgkJCSRzdGF0aVtdID0gJHN0YXQ7DQoJCX0gZWxz ZSB7DQoJCQkkc3RhdGlbXSA9IGdldFN0YXR1c051bSgkc3RhdCk7DQoJCX0NCgl9DQoJJGZp bHRTUUxbXSA9ICdTdGF0dXMgSU4gKCcuZG9RdW90ZShqb2luKCInLCciLCAkc3RhdGkpKS4n KSc7DQoNCgkkZXhwaXJlZCA9ICgkZXhwaXJlZCkgPyAkZXhwaXJlZCA6ICRwcmVmc1sncHVi bGlzaF9leHBpcmVkX2FydGljbGVzJ107DQoJaWYgKCEkZXhwaXJlZCkgew0KCQkkZmlsdFNR TFtdID0gJyhub3coKSA8PSBFeHBpcmVzIE9SIEV4cGlyZXMgPSAnLk5VTExEQVRFVElNRS4n KSc7DQoJfQ0KDQoJLy8gU29ydGluZyBydWxlczogZGF0YSBpcyBzb3J0ZWQgb25jZSBhcyBp dCBpcyBleHRyYWN0ZWQgdmlhIFNRTCBhbmQgdGhlbiBhZ2FpbiBhZnRlciB0aGUgZmFrZSBk YXRlcyBoYXZlIGJlZW4gaW5zZXJ0ZWQNCgkkc29ydCA9IChlbXB0eSgkc29ydCkpID8gJ1Bv c3RlZCBhc2MnIDogJHNvcnQ7DQoJJHNvcnQgPSBkb19saXN0KCRzb3J0KTsNCgkkc29ydFBy ZWZpeCA9ICJTT1JUXyI7DQoJJHNvcnRPcmRlciA9IGFycmF5KCk7DQoJZm9yICgkaWR4ID0g MDsgJGlkeCA8IGNvdW50KCRzb3J0KTsgJGlkeCsrKSB7DQoJCSRzb3J0aWVzID0gZXhwbG9k ZSgnICcsICRzb3J0WyRpZHhdKTsNCgkJaWYgKGNvdW50KCRzb3J0aWVzKSA8PSAxKSB7DQoJ CQkkc29ydGllc1sxXSA9ICJhc2MiOw0KCQl9DQoJCSRzb3J0aWVzWzFdID0gJHNvcnRQcmVm aXguKCgkc29ydGllc1sxXSA9PSAiZGVzYyIpID8gJ0RFU0MnIDogJ0FTQycpOw0KCQkkc29y dE9yZGVyW10gPSBhcnJheSgiYnkiID0+ICRzb3J0aWVzWzBdLCAiZGlyIiA9PiAkc29ydGll c1sxXSk7DQoJfQ0KCSRmaWx0U1FMID0gam9pbignIEFORCAnLCAkZmlsdFNRTCk7DQoJJGZp bHRTUUwgLj0gJyBPUkRFUiBCWSAnLmpvaW4oJywnLGRvU2xhc2goJHNvcnQpKTsNCg0KCSRn cmFiQ29scyA9ICcqLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQpIGFzIHVQb3N0ZWQsIHVuaXhf dGltZXN0YW1wKExhc3RNb2QpIGFzIHVMYXN0TW9kLCB1bml4X3RpbWVzdGFtcChFeHBpcmVz KSBhcyB1RXhwaXJlcyc7DQoJJGV2bGlzdCA9IHNhZmVfcm93cygkZ3JhYkNvbHMsICd0ZXh0 cGF0dGVybicsICRmaWx0U1FMLCAkZGVidWcpOw0KDQoJaWYgKCRkZWJ1Zz4yKSB7DQoJCWVj aG8gIisrIFJFQ09SRCBTRVQgKysiOw0KCQlkbXAoJGV2bGlzdCk7DQoJfQ0KCSRhbGxfZXZz ID0gJGV2X3RhbGx5ID0gYXJyYXkoKTsNCgkkbm93ID0gdGltZSgpICsgdHpfb2Zmc2V0KCk7 DQoNCgkkZXZlbnRsaW1pdCA9IGRvX2xpc3QoJGV2ZW50bGltaXQpOw0KCWlmIChjb3VudCgk ZXZlbnRsaW1pdCkgPT0gMSkgew0KCQkkZXZlbnRsaW1pdFsxXSA9ICRldmVudGxpbWl0WzBd Ow0KCX0NCg0KCSRkYXRlZmllbGRzID0gZG9fbGlzdCgkZGF0ZWZpZWxkcyk7DQoNCgkvLyBQ aGFzZSAyOiBleHBhbmQgYW55IHJlY3VycmluZyBkYXRlcyBhbmQgY29sbGF0ZSBhbGwgZXZl bnRzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIGFsbG90ZWQgcmFuZ2VzDQoJZm9yZWFjaCAoJGV2 bGlzdCBhcyAkcm93KSB7DQoJCSRldl9wb3N0ZWQgPSAoIWVtcHR5KCRkYXRlZmllbGRzWzBd KSAmJiAhZW1wdHkoJHJvd1skZGF0ZWZpZWxkc1swXV0pICYmICgkc3RkdCA9IHN0cnRvdGlt ZSgkcm93WyRkYXRlZmllbGRzWzBdXSkpICE9PSBmYWxzZSkgPyAkc3RkdCA6ICRyb3dbJ3VQ b3N0ZWQnXSt0el9vZmZzZXQoJHJvd1sndVBvc3RlZCddKTsNCgkJJGV2X2V4cGlyZXMgPSAo aXNzZXQoJGRhdGVmaWVsZHNbMV0pICYmICFlbXB0eSgkcm93WyRkYXRlZmllbGRzWzFdXSkg JiYgKCRlbmR0ID0gc3RydG90aW1lKCRyb3dbJGRhdGVmaWVsZHNbMV1dKSkgIT09IGZhbHNl KSA/ICRlbmR0IDogKCgkcm93Wyd1RXhwaXJlcyddPT0wKSA/IDAgOiAkcm93Wyd1RXhwaXJl cyddK3R6X29mZnNldCgkcm93Wyd1RXhwaXJlcyddKSk7DQoNCgkJJHNraXAgPSAoJHNraXBm aWVsZCAmJiAkcm93WyRza2lwZmllbGRdICE9ICcnKTsNCgkJJG9taXQgPSAoJG9taXRmaWVs ZCAmJiAkcm93WyRvbWl0ZmllbGRdICE9ICcnKTsNCgkJJHJlY3VyID0gKCRzdGVwZmllbGQg JiYgJHJvd1skc3RlcGZpZWxkXSAhPSAnJyk7DQoJCSRleHRyYSA9ICgkZXh0cmFmaWVsZCAm JiAkcm93WyRleHRyYWZpZWxkXSAhPSAnJyk7DQoJCSRtdWx0aSA9ICgkZXZfZXhwaXJlcyA+ ICRldl9wb3N0ZWQgJiYgKGRhdGUoImQtbS1ZIiwgJGV2X2V4cGlyZXMpICE9IGRhdGUoImQt bS1ZIiwgJGV2X3Bvc3RlZCkpKSA/IHRydWUgOiBmYWxzZTsNCg0KCQkvLyBJZiBlbmQgPCBz dGFydCB0aGUgdXNlci1zcGVjaWZpZWQgZGF0ZXMgY2Fubm90IGJlIHRydXN0ZWQNCgkJaWYg KCRldl9leHBpcmVzICE9IDAgJiYgJGV2X2V4cGlyZXMgPD0gJGV2X3Bvc3RlZCkgew0KCQkJ JGV2X3Bvc3RlZCA9ICRyb3dbJ3VQb3N0ZWQnXSt0el9vZmZzZXQoJHJvd1sndVBvc3RlZCdd KTsNCgkJCSRldl9leHBpcmVzID0gKCgkcm93Wyd1RXhwaXJlcyddPT0wKSA/IDAgOiAkcm93 Wyd1RXhwaXJlcyddK3R6X29mZnNldCgkcm93Wyd1RXhwaXJlcyddKSk7DQoJCQl0cmlnZ2Vy X2Vycm9yKCdFeHBpcnkgY2Fubm90IGJlIGJlZm9yZSBzdGFydCBkYXRlIGluICInLiRyb3db J1RpdGxlJ10uJyI6IGlnbm9yZWQnLCBFX1VTRVJfV0FSTklORyk7DQoJCX0NCgkJaWYgKCRk ZWJ1ZyA+IDEpIHsNCgkJCWVjaG8gJysrIEVWRU5UIFNUQVJUIC8vIEVORCArKyc7DQoJCQlk bXAoJHJvd1snVGl0bGUnXSk7DQoJCQlkbXAoJGV2X3Bvc3RlZCwgZGF0ZSgnWS1tLWQgSDpp OnMnLCAkZXZfcG9zdGVkKSwgJGV2X2V4cGlyZXMsIGRhdGUoJ1ktbS1kIEg6aTpzJywgJGV2 X2V4cGlyZXMpKTsNCgkJfQ0KDQoJCS8vIFJld3JpdGUgdGhlIHN0YXJ0L2VuZCBkYXRlcyBp biBjYXNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZA0KCQkkcm93Wyd1UG9zdGVkJ10gPSAkZXZf cG9zdGVkOw0KCQkkcm93WydQb3N0ZWQnXSA9IGRhdGUoIlktbS1kIEg6aTpzIiwgJGV2X3Bv c3RlZCk7DQoJCSRyb3dbJ3VFeHBpcmVzJ10gPSAkZXZfZXhwaXJlczsNCgkJJHJvd1snRXhw aXJlcyddID0gKCRldl9leHBpcmVzPT0wKSA/ICcwMDAwLTAwLTAwIDAwOjAwOjAwJyA6IGRh dGUoIlktbS1kIEg6aTpzIiwgJGV2X2V4cGlyZXMpOw0KDQoJCSRkaWZmID0gKCRldl9leHBp cmVzID09IDApID8gMCA6ICRldl9leHBpcmVzIC0gJGV2X3Bvc3RlZDsNCgkJJGV2X21vbnRo ID0gZGF0ZSgnbScsICRldl9wb3N0ZWQpOw0KCQkkZXZfeWVhciA9IGRhdGUoJ1knLCAkZXZf cG9zdGVkKTsNCgkJJGV2X2hyID0gZGF0ZSgnSCcsICRldl9wb3N0ZWQpOw0KCQkkZXZfbW4g PSBkYXRlKCdpJywgJGV2X3Bvc3RlZCk7DQoJCSRldl9zYyA9IGRhdGUoJ3MnLCAkZXZfcG9z dGVkKTsNCgkJJGlnbm9yZSA9IGFycmF5KCk7DQoNCgkJLy8gR2VuZXJhdGUgYSBza2lwIGFy cmF5IGZvciB0aGlzIGV2ZW50DQoJCWlmICgkc2tpcCkgew0KCQkJJGlnbm9yZXMgPSBkb19s aXN0KCRyb3dbJHNraXBmaWVsZF0pOw0KCQkJZm9yZWFjaCAoJGlnbm9yZXMgYXMgJHZhbCkg ew0KCQkJCSRpZ3JuZyA9IHNtZF9leHBhbmRfZGF0ZXJhbmdlKCR2YWwsICRldl9wb3N0ZWQs ICRldl9leHBpcmVzKTsNCgkJCQlmb3JlYWNoICgkaWdybmcgYXMgJHRoZXZhbCkgew0KCQkJ CQkkaWdub3JlW10gPSBkYXRlKCJkLU0tWSIsICR0aGV2YWwpOyAvLyBGb3JjZSBlYWNoIGRh dGUgdG8gYSBrbm93biBmb3JtYXQNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy8gQXBwZW5kIGFu eSBvbWl0dGVkIGV2ZW50cw0KCQlpZiAoJG9taXQpIHsNCgkJCSRvbWl0cyA9IGRvX2xpc3Qo JHJvd1skb21pdGZpZWxkXSk7DQoJCQlmb3JlYWNoICgkb21pdHMgYXMgJHZhbCkgew0KCQkJ CSRvbXJuZyA9IHNtZF9leHBhbmRfZGF0ZXJhbmdlKCR2YWwsICRldl9wb3N0ZWQsICRldl9l eHBpcmVzKTsNCgkJCQlmb3JlYWNoICgkb21ybmcgYXMgJHRoZXZhbCkgew0KCQkJCQkkaWdu b3JlW10gPSBkYXRlKCJkLU0tWSIsICR0aGV2YWwpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlp ZiAoJGRlYnVnID4gMSAmJiAkaWdub3JlKSB7DQoJCQllY2hvICcrKyBJR05PUkVEIERBVEVT ICsrJzsNCgkJCWRtcCgkaWdub3JlKTsNCgkJfQ0KDQoJCS8vIERvZXMgdGhlIGJhc2UgZXZl bnQgZGVzZXJ2ZSB0byBiZSBpbiB0aGUgcmVzdWx0cz8NCgkJaWYgKHNtZF9pbmNsdWRlX2V2 ZW50KCRldl9wb3N0ZWQsICRub3csICRpZ25vcmUsICR0aW1lLCAkZnJvbSwgJHRvLCAkbW9u dGgpKSB7DQoJCQkkYWxsX2V2c1tdID0gYXJyYXkoJ2V2JyA9PiAkcm93LCAnZmxhZ3MnID0+ ICgkbXVsdGkgPyBhcnJheSgnbXVsdGlmaXJzdCcpIDogYXJyYXkoJ3N0YW5kYXJkJykpICk7 DQoJCQkkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSA9IChpc3NldCgkZXZfdGFsbHlbJHJv d1sndVBvc3RlZCddXSkpID8gJGV2X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0rMSA6IDE7DQoJ CX0NCg0KCQkvLyBBZGQgYW55IGV4dHJhIGRhdGVzIGZvciB0aGlzIGV2ZW50DQoJCWlmICgk ZXh0cmEpIHsNCgkJCSR4dHJhID0gZG9fbGlzdCgkcm93WyRleHRyYWZpZWxkXSk7DQoJCQkk eHRyYXMgPSBhcnJheSgpOw0KDQoJCQkvLyBNYWtlIHVwIGFuIGFycmF5IG9mIGFsbCBleHRy YSBkYXRlcw0KCQkJZm9yZWFjaCAoJHh0cmEgYXMgJHZhbCkgew0KCQkJCWlmIChzdHJwb3Mo JHZhbCwgIisiKSA9PT0gZmFsc2UpIHsNCgkJCQkJJGV4cm5nID0gc21kX2V4cGFuZF9kYXRl cmFuZ2UoJHZhbCk7DQoJCQkJCSR4dHJhc1tdID0gZGF0ZSgiWS1tLWQiLCAkZXhybmdbMF0p Ow0KCQkJCQkkc3BleCA9IDA7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGZha2VfZGlmZiA9IHNh ZmVfc3RydG90aW1lKGRhdGUoIlktTS1kIiwgJGV2X2V4cGlyZXMpIC4gIiAyMzo1OTo1OSIp Ow0KCQkJCQkkZmRpZmYgPSAoJGV2X2V4cGlyZXM9PTApID8gMCA6ICRmYWtlX2RpZmYgLSAk ZXZfcG9zdGVkOw0KCQkJCQkkY2hrID0gJGFsbHNwYW5uZWQgJiYgJG11bHRpICYmICEkcmVj dXI7DQoJCQkJCSRzcGlkdGggPSAkY2hrID8gY2VpbCgkZmRpZmYgLyAoNjAqNjAqMjQpKSA6 IDE7IC8vIGRheXMgYmV0d2VlbiBkYXRlcw0KCQkJCQkkdmFsID0gcnRyaW0oJHZhbCwgJysn KTsNCgkJCQkJZm9yICgkamR4ID0gMTsgJGpkeCA8PSAkc3BpZHRoOyAkamR4KyspIHsNCgkJ CQkJCSR4dHJhc1tdID0gZGF0ZSgiWS1tLWQiLCBzYWZlX3N0cnRvdGltZSgkdmFsIC4gKCgk amR4PT0xKSA/ICcnIDogJysnLigkamR4LTEpLicgZGF5cycpKSk7DQoJCQkJCX0NCgkJCQkJ JHNwZXggPSAkY2hrID8gMSA6IDA7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkkeHRyYXMgPSBhcnJh eV91bmlxdWUoJHh0cmFzKTsNCg0KCQkJJHN0YW1wb2ZmID0gKGludCkoMzYwMCokZXZfaHIp ICsgKGludCkoNjAqJGV2X21uKSArIChpbnQpJGV2X3NjOw0KCQkJZm9yZWFjaCAoJHh0cmFz IGFzICRqZHggPT4gJHZhbCkgew0KCQkJCSR0bSA9IHN0cnRvdGltZSgkdmFsKTsNCgkJCQkk ZmxhZ3MgPSBhcnJheSgnZXh0cmEnKTsNCg0KCQkJCS8vIE5vICRpZ25vcmUgZm9yIGFkZGl0 aW9uYWwgZXZlbnRzLCBhcyB0aGV5IGFsd2F5cyBzaG93IHVwDQoJCQkJaWYgKHNtZF9pbmNs dWRlX2V2ZW50KCR0bSskc3RhbXBvZmYsICRub3csIGFycmF5KCksICR0aW1lLCAkZnJvbSwg JHRvLCAkbW9udGgpKSB7DQoJCQkJCSRmYWtlcm93ID0gJHJvdzsNCgkJCQkJJGZha2Vyb3db J1Bvc3RlZCddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCAkdG0rJHN0YW1wb2ZmKTsNCgkJCQkJ JGZha2Vyb3dbJ3VQb3N0ZWQnXSA9ICR0bSskc3RhbXBvZmY7DQoJCQkJCWlmICgkZGlmZiA+ IDApIHsNCgkJCQkJCSRmYWtlcm93WydFeHBpcmVzJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIs ICR0bSskc3RhbXBvZmYrJGRpZmYpOw0KCQkJCQkJJGZha2Vyb3dbJ3VFeHBpcmVzJ10gPSAk dG0rJHN0YW1wb2ZmKyRkaWZmOw0KCQkJCQl9DQoJCQkJCWlmICgkc3BleCkgew0KCQkJCQkJ JGZsYWdzW10gPSAoJGpkeD09MCkgPyAnbXVsdGlmaXJzdCcgOiAoKCRqZHg9PSRzcGlkdGgt MSkgPyAnbXVsdGlsYXN0JyA6ICdtdWx0aScpOw0KCQkJCQl9DQoJCQkJCSRhbGxfZXZzW10g PSBhcnJheSgnZXYnID0+ICRmYWtlcm93LCAnZmxhZ3MnID0+ICRmbGFncyk7DQoJCQkJCSRl dl90YWxseVskZmFrZXJvd1sndVBvc3RlZCddXSA9IChpc3NldCgkZXZfdGFsbHlbJGZha2Vy b3dbJ3VQb3N0ZWQnXV0pKSA/ICRldl90YWxseVskZmFrZXJvd1sndVBvc3RlZCddXSsxIDog MTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlpZiAoJHJlY3VyKSB7DQoJCQkkZmxhZ3MgPSBh cnJheSgncmVjdXJmaXJzdCcpOw0KCQkJJGZyZXEgPSBkb19saXN0KCRyb3dbJHN0ZXBmaWVs ZF0pOw0KCQkJJG1vbnRobHkgPSBmYWxzZTsNCgkJCSRjdXJybW9udGggPSAkZXZfbW9udGg7 DQoJCQkkY3VycnllYXIgPSAkZXZfeWVhcjsNCgkJCWZvcmVhY2ggKCRmcmVxIGFzICRpbnRl cnZhbCkgew0KCQkJCSRmYWtlcm93ID0gJHJvdzsNCgkJCQkkY3N0YW1wID0gJGV2X3Bvc3Rl ZDsNCgkJCQlmb3IoJGlkeCA9IDA7ICRpZHggPCA5OTk5OTsgJGlkeCsrKSB7DQoJCQkJCSRs c3RhbXAgPSAkY3N0YW1wOw0KCQkJCQlpZiAoKGlzc2V0KCRldl90YWxseVskcm93Wyd1UG9z dGVkJ11dKSAmJiAoJGV2X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0gPj0gJGV2ZW50bGltaXRb MF0pKSB8fCAoJHRvICYmICRjc3RhbXAgPiBzYWZlX3N0cnRvdGltZSgkdG8pKSkgew0KCQkJ CQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJJGl2YWwgPSBzdHJfcmVwbGFjZSgiP21vbnRoIiwg ZGF0ZSgnRicsIG1rdGltZSgwLDAsMCwkY3Vycm1vbnRoLDEpKSwgJGludGVydmFsKTsNCgkJ CQkJJGl2YWwgPSBzdHJfcmVwbGFjZSgiP3llYXIiLCAkY3VycnllYXIsICRpdmFsKTsNCg0K CQkJCQlpZiAoc3RycG9zKCRpdmFsLCAibGFzdCIpID09PSAwKSB7DQoJCQkJCQkkaXZhbCA9 IGRhdGUoImwsIEYgalMgWSIsIHN0cnRvdGltZSggJGl2YWwsIG1rdGltZSgxMiwgMCwgMCwg ZGF0ZSgibiIsIG1rdGltZSgwLDAsMCwkY3Vycm1vbnRoLDEsJGN1cnJ5ZWFyKSkrMSwgMSwg JGN1cnJ5ZWFyKSApKTsNCgkJCQkJCSRtb250aGx5ID0gdHJ1ZTsNCgkJCQkJfSBlbHNlIGlm IChzdHJwb3MoJGl2YWwsICJmaXJzdCIpID09PSAwKSB7DQoJCQkJCQkkaXZhbCA9IGRhdGUo ImwsIEYgalMgWSIsIHN0cnRvdGltZSggJGl2YWwsIG1rdGltZSgxMiwgMCwgMCwgKCgkY3Vy cm1vbnRoPjEpID8gJGN1cnJtb250aC0xIDogMTIpLCBkYXRlKCJ0IiwgbWt0aW1lKDAsMCww LCRjdXJybW9udGgtMSwxLCgoJGN1cnJtb250aD09MSkgPyAkY3VycnllYXItMTogJGN1cnJ5 ZWFyKSkgKSwgKCgkY3Vycm1vbnRoPT0xKSA/ICRjdXJyeWVhci0xOiAkY3VycnllYXIpKSAp KTsNCgkJCQkJCSRtb250aGx5ID0gdHJ1ZTsNCgkJCQkJfSBlbHNlIGlmIChzdHJwb3MoJGl2 YWwsICJ0aGlzIikgPT09IDApIHsNCgkJCQkJCSRtb250aGx5ID0gdHJ1ZTsNCgkJCQkJfQ0K CQkJCQlpZiAoc3RycG9zKCRpbnRlcnZhbCwgIj9tb250aCIpIHx8IHN0cnBvcygkaW50ZXJ2 YWwsICI/eWVhciIpKSB7DQoJCQkJCQkkbW9udGhseSA9IHRydWU7DQoJICAgICAgICAgICAg fQ0KDQoJCQkJCWlmICgkbW9udGhseSkgew0KCQkJCQkJJGNzdGFtcCA9IHN0cnRvdGltZSgk aXZhbCk7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkY3N0YW1wID0gc3RydG90aW1lKCRpdmFs LCAkY3N0YW1wKTsNCgkJCQkJfQ0KDQoJCQkJCS8vIFRoaXMga2x1ZGdlIHRha2VzIGFjY291 bnQgb2YgdGltZXN0YW1wcyBsaWtlICJsYXN0IFRodXJzZGF5IiAob2YgdGhlIG1vbnRoKS4g VGhlIGxhc3QgJ3doYXRldmVyIGRheScgb2YNCgkJCQkJLy8gYSBtb250aCBjYW4gb25seSBi ZSBhIG1heGltdW0gb2YgMzEgZGF5cyBiZWZvcmUgdGhlIGxhc3QgdGltZXN0YW1wIHdlIHNh dywgc28gY2hlY2sgZm9yIHRoYXQgKCsvLSAxMCBtaW5zKQ0KCQkJCQkkZGlmZnN0YW1wID0g JGNzdGFtcCAtICRsc3RhbXA7DQoJCQkJCWlmICgkZGlmZnN0YW1wIDwgMCkgew0KCQkJCQkJ aWYgKCRkaWZmc3RhbXAgPiAtKDYwKjYwKjI0KjMxKSs2MDApIHsNCgkJCQkJCQkkY3N0YW1w ID0gZmFsc2U7IC8vIFNvbWUgJ2xhc3Qgd2Vla2RheScgb2YgdGhlIHByZXZpb3VzIG1vbnRo DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCWJyZWFrOyAvLyBQSFBfSU5UX01BWCBleGNlZWRl ZA0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWlmICgkY3N0YW1wICE9PSBmYWxzZSkgew0KCQkJ CQkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCQkJCQlkbXAoIklOVEVSVkFMOiAiLiAkY3N0YW1w IC4gJyAvLyAnIC5kYXRlKCdkLU0tWSBIOmk6cycsICRjc3RhbXApKTsNCgkJCQkJCX0NCg0K CQkJCQkJaWYgKCgkY3N0YW1wIDwgJGV2X2V4cGlyZXMgfHwgJGV2X2V4cGlyZXMgPT0gJzAn KSAmJiAoJGNzdGFtcCAhPSAkZXZfcG9zdGVkKSkgew0KCQkJCQkJCSRzaG93X21lID0gc21k X2luY2x1ZGVfZXZlbnQoJGNzdGFtcCwgJG5vdywgJGlnbm9yZSwgJHRpbWUsICRmcm9tLCAk dG8sICRtb250aCk7DQoJCQkJCQkJaWYgKCRzaG93X21lKSB7DQoJCQkJCQkJCSRmbGFnc1td ID0gJ3JlY3VyJzsNCgkJCQkJCQkJJGZha2Vyb3dbJ1Bvc3RlZCddID0gZGF0ZSgiWS1tLWQg SDppOnMiLCAkY3N0YW1wKTsNCgkJCQkJCQkJJGZha2Vyb3dbJ3VQb3N0ZWQnXSA9ICRjc3Rh bXA7DQoJCQkJCQkJCSRhbGxfZXZzW10gPSBhcnJheSgnZXYnID0+ICRmYWtlcm93LCAnZmxh Z3MnID0+ICRmbGFncyk7DQoJCQkJCQkJCSRldl90YWxseVskcm93Wyd1UG9zdGVkJ11dID0g KGlzc2V0KCRldl90YWxseVskcm93Wyd1UG9zdGVkJ11dKSkgPyAkZXZfdGFsbHlbJHJvd1sn dVBvc3RlZCddXSsxIDogMTsNCgkJCQkJCQkJJGZsYWdzID0gYXJyYXkoKTsgLy8gcmVzZXQg c28gcmVjdXJmaXJzdCBpcyByZW1vdmVkDQoJCQkJCQkJfQ0KCQkJCQkJfSBlbHNlIHsNCgkJ CQkJCQlicmVhazsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCQkvLyBJbmNyZW1lbnQgdGhlIG1v bnRoL3llYXIgcmVhZHkgZm9yIHRoZSBuZXh0IGludGVydmFsDQoJCQkJCWlmICgkbW9udGhs eSkgew0KCQkJCQkJJGN1cnJ5ZWFyID0gKCRjdXJybW9udGg9PTEyKSA/ICRjdXJyeWVhcisx IDogJGN1cnJ5ZWFyOw0KCQkJCQkJJGN1cnJtb250aCA9ICgkY3Vycm1vbnRoPT0xMikgPyAx IDogJGN1cnJtb250aCsxOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkZGVidWc+MSkgew0K CQkJCQlpZiAoaXNzZXQoJGV2X3RhbGx5WyRyb3dbJ3VQb3N0ZWQnXV0pKSB7DQoJCQkJCQlk bXAoIlRBTExZOiAiLiAkZXZfdGFsbHlbJHJvd1sndVBvc3RlZCddXSk7DQoJCQkJCX0NCgkJ CQl9DQoJCQl9DQoJCX0gZWxzZSBpZiAoJGFsbHNwYW5uZWQgJiYgZGF0ZSgiWS1NLWQiLCAk ZXZfZXhwaXJlcykgIT0gZGF0ZSgiWS1NLWQiLCAkZXZfcG9zdGVkKSkgew0KCQkJJHBvc3Rk YXRlID0gZGF0ZSgiWS1NLWQgSDppOnMiLCAkZXZfcG9zdGVkKTsNCgkJCSRmYWtlX2RpZmYg PSBzYWZlX3N0cnRvdGltZShkYXRlKCJZLU0tZCIsICRldl9leHBpcmVzKSAuICIgMjM6NTk6 NTkiKTsNCgkJCSRkaWZmID0gKCRldl9leHBpcmVzPT0wKSA/IDAgOiAkZmFrZV9kaWZmIC0g JGV2X3Bvc3RlZDsNCgkJCSRzcGlkdGggPSBjZWlsKCRkaWZmIC8gKDYwKjYwKjI0KSk7IC8v IGRheXMgYmV0d2VlbiBkYXRlcw0KCQkJZm9yICgkamR4ID0gMTsgJGpkeCA8ICRzcGlkdGg7 ICRqZHgrKykgew0KCQkJCSRmbGFncyA9IGFycmF5KCk7DQoJCQkJJHRtID0gc2FmZV9zdHJ0 b3RpbWUoJHBvc3RkYXRlLicrJy4kamR4LicgZGF5cycpOw0KCQkJCSRzaG93X21lID0gc21k X2luY2x1ZGVfZXZlbnQoJHRtLCAkbm93LCAkaWdub3JlLCAkdGltZSwgJGZyb20sICR0bywg JG1vbnRoKTsNCgkJCQlpZiAoJHNob3dfbWUpIHsNCgkJCQkJJGZsYWdzW10gPSAoJGpkeD09 JHNwaWR0aC0xKSA/ICdtdWx0aWxhc3QnIDogJ211bHRpJzsNCgkJCQkJJGZha2Vyb3cgPSAk cm93Ow0KCQkJCQkkZmFrZXJvd1snUG9zdGVkJ10gPSBkYXRlKCJZLW0tZCBIOmk6cyIsICR0 bSk7DQoJCQkJCSRmYWtlcm93Wyd1UG9zdGVkJ10gPSAkdG07DQoJCQkJCSRhbGxfZXZzW10g PSBhcnJheSgnZXYnID0+ICRmYWtlcm93LCAnZmxhZ3MnID0+ICRmbGFncyk7DQoJCQkJfQ0K CQkJfQ0KCQl9DQoJfQ0KDQoJaWYgKCRkZWJ1Zz4yKSB7DQoJCWVjaG8gIisrIFBSRS1TT1JU RUQgKysiOw0KCQlkbXAoJGFsbF9ldnMpOw0KCX0NCg0KCS8vIE1ha2UgdXAgYW4gYXJyYXlf bXVsdGlzb3J0IGFyZyBsaXN0IGFuZCBleGVjdXRlIGl0DQoJZm9yZWFjaCgkYWxsX2V2cyBh cyAka2V5ID0+ICRlbnRyeSkgew0KCQkkcm93ID0gJGVudHJ5WydldiddOw0KCQlmb3JlYWNo ICgkcm93IGFzICRpZGVudGlmaWVyID0+ICRpdGVtKSB7DQoJCQkkdmFybmFtZSA9ICJjb2xf Ii4kaWRlbnRpZmllcjsNCgkJCSR7JHZhcm5hbWV9WyRrZXldID0gJGl0ZW07DQoJCX0NCgl9 DQoJaWYoY291bnQoJGFsbF9ldnMpID4gMCkgew0KCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwg Y291bnQoJHNvcnRPcmRlcik7ICRpZHgrKykgew0KCQkJJHNvcnRhcmdzW10gPSAnJGNvbF8n LiRzb3J0T3JkZXJbJGlkeF1bJ2J5J107DQoJCQkkc29ydGFyZ3NbXSA9ICRzb3J0T3JkZXJb JGlkeF1bJ2RpciddOw0KCQl9DQoJCSRzb3J0aXQgPSAnYXJyYXlfbXVsdGlzb3J0KCcuaW1w bG9kZSgiLCAiLCRzb3J0YXJncykuJywgJGFsbF9ldnMpOyc7DQoJCWV2YWwoJHNvcnRpdCk7 DQoJfQ0KDQoJaWYgKCRkZWJ1Zz4yKSB7DQoJCWVjaG8gIisrIFBPU1QtU09SVEVEICsrIjsN CgkJZG1wKCRhbGxfZXZzKTsNCgl9DQoNCgkvLyBIYW5kbGUgcGFnaW5nDQoJaWYgKCRwYWdp bmcpIHsNCgkJJGdyYW5kX3RvdGFsID0gY291bnQoJGFsbF9ldnMpOw0KCQkkdG90YWwgPSAk Z3JhbmRfdG90YWwgLSAkb2Zmc2V0Ow0KCQkkbnVtUGFnZXMgPSBjZWlsKCR0b3RhbC8kcGFn ZWJ5KTsNCgkJJHBnID0gKCEkcHJldGV4dFsncGcnXSkgPyAxIDogJHByZXRleHRbJ3BnJ107 DQoJCSRwZ29mZnNldCA9ICRvZmZzZXQgKyAoKCRwZyAtIDEpICogJHBhZ2VieSk7DQoJCS8v IHNlbmQgcGFnaW5nIGluZm8gdG8gdHhwOm5ld2VyIGFuZCB0eHA6b2xkZXINCgkJJHBhZ2Vv dXRbJ3BnJ10gPSAkcGc7DQoJCSRwYWdlb3V0WydudW1QYWdlcyddID0gJG51bVBhZ2VzOw0K CQkkcGFnZW91dFsncyddID0gJHByZXRleHRbJ3MnXTsNCgkJJHBhZ2VvdXRbJ2MnXSA9ICRw cmV0ZXh0WydjJ107DQoJCSRwYWdlb3V0WydncmFuZF90b3RhbCddID0gJGdyYW5kX3RvdGFs Ow0KCQkkcGFnZW91dFsndG90YWwnXSA9ICR0b3RhbDsNCg0KCQlpZiAoZW1wdHkoJHRoaXNw YWdlKSkNCgkJCSR0aGlzcGFnZSA9ICRwYWdlb3V0Ow0KCQlpZiAoJHBnb25seSkNCgkJCXJl dHVybjsNCgl9IGVsc2Ugew0KCQkkcGdvZmZzZXQgPSAkb2Zmc2V0Ow0KCX0NCg0KCS8vIFBo YXNlIDM6IGl0ZXJhdGUgb3ZlciB0aGUgbmV3IGFycmF5IG9iZXlpbmcgYW55IG9mZnNldC9s aW1pdC4gQW55dGhpbmcgaW4gdGhlIHJhbmdlIGdldHMgcG9wdWxhdGVkIGFuZCBwYXJzZWQN Cgkkb3V0ID0gYXJyYXkoKTsNCgkkY3RyID0gMDsNCglhcnRpY2xlX3B1c2goKTsNCgkkbGFz dHBvc3RlZCA9IDA7DQoJZm9yZWFjaCAoJGFsbF9ldnMgYXMgJGlkeCA9PiAkZW50cnkpIHsN CgkJJHNtZF9jYWxfZmxhZyA9ICRzbWRfZGF0ZSA9ICRzbWRfZXZlbnRpbmZvID0gYXJyYXko KTsNCg0KCQlpZiAoJGlkeCA+PSAkcGdvZmZzZXQgJiYgJGN0ciA8ICRsaW1pdCkgew0KCQkJ JHJvdyA9ICRlbnRyeVsnZXYnXTsNCg0KCQkJJHNtZF9jYWxfZmxhZyA9ICRlbnRyeVsnZmxh Z3MnXTsNCg0KCQkJJHRoaXNwb3N0ZWQgPSBkYXRlKCdZLW0tZCcsICRyb3dbJ3VQb3N0ZWQn XSk7DQoJCQkkbmV4dHBvc3RlZCA9IGlzc2V0KCRhbGxfZXZzWydldiddWyRpZHgrMV0pID8g ZGF0ZSgnWS1tLWQnLCAkYWxsX2V2c1snZXYnXVskaWR4KzFdWyd1UG9zdGVkJ10pIDogMDsN Cg0KCQkJLy8gQWRqdXN0IHRpbWVzIHNvIHR4cDpwb3N0ZWQvZXhwaXJlcyByZXR1cm4gY29y cmVjdCBzdGFtcHMNCgkJCSRyb3dbJ1Bvc3RlZCddID0gJHJvd1snUG9zdGVkJ10tdHpfb2Zm c2V0KHN0cnRvdGltZSgkcm93WydQb3N0ZWQnXSkpOw0KCQkJJHJvd1sndVBvc3RlZCddID0g JHJvd1sndVBvc3RlZCddLXR6X29mZnNldCgkcm93Wyd1UG9zdGVkJ10pOw0KCQkJJHJvd1sn RXhwaXJlcyddID0gKCRyb3dbJ3VFeHBpcmVzJ10gPT0gMCkgPyAnMDAwMC0wMC0wMCAwMDow MDowMCcgOiAkcm93WydFeHBpcmVzJ10tdHpfb2Zmc2V0KHN0cnRvdGltZSgkcm93WydFeHBp cmVzJ10pKTsNCgkJCSRyb3dbJ3VFeHBpcmVzJ10gPSAoJHJvd1sndUV4cGlyZXMnXSA9PSAw KSA/IDAgOiAkcm93Wyd1RXhwaXJlcyddLXR6X29mZnNldCgkcm93Wyd1RXhwaXJlcyddKTsN Cg0KCQkJLy8gUG9wdWxhdGUgYWRkaXRpb25hbCBldmVudCBpbmZvcm1hdGlvbg0KCQkJJGZh a2VzdGFtcCA9ICgkcm93Wyd1RXhwaXJlcyddID09IDApID8gMCA6IHN0cnRvdGltZShkYXRl KCJZLU0tZCIsICRyb3dbJ3VFeHBpcmVzJ10pIC4gIiAyMzo1OTo1OSIpOw0KCQkJJHNtZF9l dmVudGluZm9bJ2R1cmF0aW9uJ10gPSAoJHJvd1sndUV4cGlyZXMnXSA9PSAwKSA/IDAgOiAk cm93Wyd1RXhwaXJlcyddIC0gJHJvd1sndVBvc3RlZCddOw0KCQkJJHNtZF9ldmVudGluZm9b J2R1cmF0aW9uZGF5cyddID0gKCRmYWtlc3RhbXApID8gY2VpbCgoJGZha2VzdGFtcCAtICRy b3dbJ3VQb3N0ZWQnXSkgLyAoNjAqNjAqMjQpKSA6IDA7DQoJCQkkc21kX2RhdGVbJ3knXSA9 IHN0cmZ0aW1lKCclWScsICRyb3dbJ3VQb3N0ZWQnXSk7DQoJCQkkc21kX2RhdGVbJ20nXSA9 IHN0cmZ0aW1lKCclbScsICRyb3dbJ3VQb3N0ZWQnXSk7DQoJCQkkc21kX2RhdGVbJ2QnXSA9 IChpbnQpc3RyZnRpbWUoJyVkJywgJHJvd1sndVBvc3RlZCddKTsNCgkJCSRzbWRfZGF0ZVsn dyddID0gc3RyZnRpbWUoc21kX2NhbF9yZWZvcm1hdF93aW4oJyVWJywgJHJvd1sndVBvc3Rl ZCddKSwgJHJvd1sndVBvc3RlZCddKTsNCgkJCSRzbWRfZGF0ZVsnaXknXSA9IHN0cmZ0aW1l KHNtZF9jYWxfcmVmb3JtYXRfd2luKCclRycsICRyb3dbJ3VQb3N0ZWQnXSksICRyb3dbJ3VQ b3N0ZWQnXSk7DQoJCQlpZiAoJHJvd1sndUV4cGlyZXMnXSA9PSAwKSB7DQoJCQkJJHNtZF9k YXRlWydleHB5J10gPSAkc21kX2RhdGVbJ2V4cG0nXSA9ICRzbWRfZGF0ZVsnZXhwZCddID0g JHNtZF9kYXRlWydleHB3J10gPSAkc21kX2RhdGVbJ2V4cGl5J10gPSAnJzsNCgkJCX0gZWxz ZSB7DQoJCQkJJHNtZF9kYXRlWydleHB5J10gPSBzdHJmdGltZSgnJVknLCAkcm93Wyd1RXhw aXJlcyddKTsNCgkJCQkkc21kX2RhdGVbJ2V4cG0nXSA9IHN0cmZ0aW1lKCclbScsICRyb3db J3VFeHBpcmVzJ10pOw0KCQkJCSRzbWRfZGF0ZVsnZXhwZCddID0gKGludClzdHJmdGltZSgn JWQnLCAkcm93Wyd1RXhwaXJlcyddKTsNCgkJCQkkc21kX2RhdGVbJ2V4cHcnXSA9IHN0cmZ0 aW1lKHNtZF9jYWxfcmVmb3JtYXRfd2luKCclVicsICRyb3dbJ3VFeHBpcmVzJ10pLCAkcm93 Wyd1RXhwaXJlcyddKTsNCgkJCQkkc21kX2RhdGVbJ2V4cGl5J10gPSBzdHJmdGltZShzbWRf Y2FsX3JlZm9ybWF0X3dpbignJUcnLCAkcm93Wyd1RXhwaXJlcyddKSwgJHJvd1sndUV4cGly ZXMnXSk7DQoJCQl9DQoJCQlwb3B1bGF0ZUFydGljbGVEYXRhKCRyb3cpOw0KCQkJJHRoaXNh cnRpY2xlWydpc19maXJzdCddID0gKCR0aGlzcG9zdGVkICE9ICRsYXN0cG9zdGVkKTsNCgkJ CSR0aGlzYXJ0aWNsZVsnaXNfbGFzdCddID0gKCR0aGlzcG9zdGVkICE9ICRuZXh0cG9zdGVk KTsNCgkJCSRsYXN0cG9zdGVkID0gJHRoaXNwb3N0ZWQ7DQoJCQkkb3V0W10gPSAoJHRoaW5n KSA/IHBhcnNlKCR0aGluZykgOiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogaHJl Zigkcm93WydQb3N0ZWQnXSwgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1sn VGl0bGUnXS4nIicpICk7DQoJCQkkY3RyKys7DQoJCX0NCgl9DQoJYXJ0aWNsZV9wb3AoKTsN CglyZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRjbGFzcyk7DQp9DQoN Ci8vIFRyeSBhbmQgb3V0cHV0ICJuaWNlIiBkYXRlcyB0aGF0IHJlYWQgd2VsbCBhY3Jvc3Mg bW9udGgveWVhciBib3VuZGFyaWVzLg0KLy8gRm9yIGV4YW1wbGU6IDI4IE1heSAtIDA1IEp1 biAyMDExIG9yIE1heSAxMS0xNiAyMDExLCBkZXBlbmRpbmcgb24gZm9ybWF0DQpmdW5jdGlv biBzbWRfZXZlbnRfZHVyYXRpb24oJGF0dHMpIHsNCglleHRyYWN0KGxBdHRzKGFycmF5KA0K CQknc3RhcnQnICAgICA9PiBwb3N0ZWQoYXJyYXkoJ2Zvcm1hdCcgPT4gJyVzJykpLA0KCQkn ZW5kJyAgICAgICA9PiBleHBpcmVzKGFycmF5KCdmb3JtYXQnID0+ICclcycpKSwNCgkJJ2Zv cm1hdCcgICAgPT4gJyVkICViICVZJywNCgkJJ3NlcGFyYXRvcicgPT4gJyAmbmRhc2g7ICcs DQoJCSdkZWJ1ZycgICAgID0+IDAsDQoJKSwgJGF0dHMpKTsNCg0KCS8vIEV4dHJhY3QgdGhl IHJlbGV2YW50IHBvcnRpb25zIG9mIHRoZSBmb3JtYXQgc28gd2UgY2FuIG11Y2sgYWJvdXQg d2l0aCB0aGVtDQoJcHJlZ19tYXRjaF9hbGwoJy9cJShbZGVqYkJtaGdHeVldKS8nLCAkZm9y bWF0LCAkbWF0Y2hlcyk7DQoNCgkkaW5kZXhlcyA9IGFycmF5KCdkYXknID0+ICcnLCAnbW9u dGgnID0+ICcnLCAneWVhcicgPT4gJycpOw0KCWZvcmVhY2goJG1hdGNoZXNbMV0gYXMgJGlk eCA9PiAkdG9rZW4pIHsNCgkJc3dpdGNoICgkdG9rZW4pIHsNCgkJCWNhc2UgJ2QnOg0KCQkJ Y2FzZSAnZSc6DQoJCQljYXNlICdqJzoNCgkJCQkkaW5kZXhlc1snZGF5J10gPSAkaWR4Ow0K CQkJCWJyZWFrOw0KCQkJY2FzZSAnYic6DQoJCQljYXNlICdCJzoNCgkJCWNhc2UgJ20nOg0K CQkJY2FzZSAnaCc6DQoJCQkJJGluZGV4ZXNbJ21vbnRoJ10gPSAkaWR4Ow0KCQkJCWJyZWFr Ow0KCQkJY2FzZSAnZyc6DQoJCQljYXNlICdHJzoNCgkJCWNhc2UgJ3knOg0KCQkJY2FzZSAn WSc6DQoJCQkJJGluZGV4ZXNbJ3llYXInXSA9ICRpZHg7DQoJCQkJYnJlYWs7DQoJCX0NCgl9 DQoNCgkkZGF5X2ZpcnN0ID0gKCRpbmRleGVzWydkYXknXSA8ICRpbmRleGVzWydtb250aCdd KTsNCgkkeWVhcl9maXJzdCA9ICgkaW5kZXhlc1sneWVhciddID09IDApOw0KCSRoYXNfeWVh ciA9IGZhbHNlOw0KDQoJaWYgKCRlbmQpIHsNCgkJaWYgKHN0cmZ0aW1lKCclWSAlbSAlZCcs ICRzdGFydCkgPT0gc3RyZnRpbWUoJyVZICVtICVkJywkZW5kKSkgew0KCQkJIC8vIGJlZ2lu IGFuZCBlbmQgb24gc2FtZSBkYXkNCgkJCSAkc19mb3JtYXQgPSAnJzsNCgkJCSAkZV9mb3Jt YXQgPSAkZm9ybWF0Ow0KCQkJICRoYXNfeWVhciA9IHRydWU7DQoJCSB9IGVsc2Ugew0KCQkJ aWYgKHN0cmZ0aW1lKCclWScsICRzdGFydCkgPT0gc3RyZnRpbWUoJyVZJywgJGVuZCkpIHsN CgkJCQkvLyBzYW1lIHllYXINCgkJCQlpZiAoc3RyZnRpbWUoJyVtJywgJHN0YXJ0KSA9PSBz dHJmdGltZSgnJW0nLCAkZW5kKSkgew0KCQkJCQkvLyBhbmQgc2FtZSBtb250aA0KCQkJCQkk cmUxID0gKCRkYXlfZmlyc3QpID8gJy9cJVtiQm1oZ0d5WV0vJyA6ICcvXCVbZ0d5WV0vJzsN CgkJCQkJJHJlMiA9ICgkZGF5X2ZpcnN0KSA/ICcvXCVbZ0d5WV0vJyA6ICcvXCVbYkJtaGdH eVldLyc7DQoJDQoJCQkJCSRzX2Zvcm1hdCA9IHRyaW0ocHJlZ19yZXBsYWNlKCRyZTEsICcn LCAkZm9ybWF0KSk7DQoJCQkJCSRlX2Zvcm1hdCA9ICgkcmUyKSA/IHRyaW0ocHJlZ19yZXBs YWNlKCRyZTIsICcnLCAkZm9ybWF0KSkgOiAkZm9ybWF0Ow0KCQkJCX0gZWxzZSB7DQoJCQkJ CS8vIG5vdCBzYW1lIG1vbnRoDQoJCQkJCSRzX2Zvcm1hdCA9ICRlX2Zvcm1hdCA9IHRyaW0o cHJlZ19yZXBsYWNlKCcvXCVbZ0d5WV0vJywgJycsICRmb3JtYXQpKTsNCgkJCQl9DQoJCQl9 IGVsc2Ugew0KCQkJCS8vIGRpZmZlcmVudCB5ZWFyDQoJCQkJJHNfZm9ybWF0ID0gJGVfZm9y bWF0ID0gJGZvcm1hdDsNCgkJCQkkaGFzX3llYXIgPSB0cnVlOw0KCQkJfQ0KCQkJJHNfZm9y bWF0IC49ICRzZXBhcmF0b3I7DQoJCX0NCgkNCgkJLy8gQWRkIHRoZSB5ZWFyIGJhY2sgaW4g dGhlIGNvcnJlY3QgcG9zaXRpb24NCgkJJHNfZm9ybWF0ID0gKCRoYXNfeWVhcikgPyAkc19m b3JtYXQgOiAoKCR5ZWFyX2ZpcnN0KSA/ICRtYXRjaGVzWzBdWyRpbmRleGVzWyd5ZWFyJ11d IC4gJyAnIC4gJHNfZm9ybWF0IDogJHNfZm9ybWF0KTsNCgkJJGVfZm9ybWF0ID0gKCRoYXNf eWVhcikgPyAkZV9mb3JtYXQgOiAoKCR5ZWFyX2ZpcnN0KSA/ICRlX2Zvcm1hdCA6ICRlX2Zv cm1hdCAuICcgJyAuICRtYXRjaGVzWzBdWyRpbmRleGVzWyd5ZWFyJ11dKTsNCgl9IGVsc2Ug ew0KCQkkc19mb3JtYXQgPSAkZm9ybWF0Ow0KCQkkZV9mb3JtYXQgPScnOw0KCX0NCg0KCXJl dHVybiAoKCRzX2Zvcm1hdCkgPyBzdHJmdGltZSgkc19mb3JtYXQsICRzdGFydCkgOiAnJykg LiAoKCRlX2Zvcm1hdCkgPyBzdHJmdGltZSgkZV9mb3JtYXQsICRlbmQpIDogJycpOw0KfQ0K DQovLyBBbiB1bm9wdGltaXplZCB3b3JrYXJvdW5kIHdoZW4gIiVWIiBhbmQgIiVHIiBmYWls cyAodXN1YWxseSBvbiBXaW5kb3dzKQ0KLy8gQWxnb3JpdGhtIGFkYXB0ZWQgZnJvbSBodHRw Oi8vd3d3LnBlcnNvbmFsLmVjdS5lZHUvbWNjYXJ0eXIvSVNPd2RBTEcudHh0IHdpdGggdGhh bmtzLg0KLy8gQWxsIG90aGVyIHNob3J0Y3V0IGFsZ29yaXRobXMgZmFpbGVkIGVkZ2UgY2Fz ZXMNCmZ1bmN0aW9uIHNtZF9jYWxfaXNvX3dlZWsoJGZvcm1hdD0nJVYnLCAkdGltZSA9IG51 bGwpIHsNCglpZiAoISR0aW1lKSAkdGltZSA9IHRpbWUoKTsNCgkNCgkkeXIgPSBzdHJmdGlt ZSgiJVkiLCAkdGltZSk7DQoJJGxlYXAgPSAoICggKCR5ciAlIDQgPT0gMCkgJiYgKCR5ciAl IDEwMCAhPSAwKSApIHx8ICR5ciAlIDQwMCA9PSAwICk7DQoJJGxlYXBfcHJldiA9ICggKCAo KCR5ci0xKSAlIDQgPT0gMCkgJiYgKCgkeXItMSkgJSAxMDAgIT0gMCkgKSB8fCAoJHlyLTEp ICUgNDAwID09IDAgKTsNCgkkZGF5X29mX3llYXIgPSBzdHJmdGltZSgnJWonLCAkdGltZSk7 DQoNCgkvLyBGaW5kIHRoZSB3ZWVrZGF5IG9mIEphbiAxc3QgaW4gdGhlIGdpdmVuIHllYXIN CgkkeXkgPSAoJHlyIC0gMSkgJSAxMDA7DQoJJGMgPSAoJHlyIC0gMSkgLSAkeXk7DQoJJGcg PSAkeXkgKyAoJHl5IC8gNCk7DQoJJGphbjF3ZWVrZGF5ID0gMSArICgoKCgoJGMgLyAxMDAp ICUgNCkgKiA1KSArICRnKSAlIDcpOw0KDQoJLy8gRmluZCB3ZWVrZGF5ICggY291bGQgdXNl OiAkd2Vla2RheSA9IHN0cmZ0aW1lKCcldScsICR0aW1lKTsgKQ0KCSRoID0gJGRheV9vZl95 ZWFyICsgKCRqYW4xd2Vla2RheSAtIDEpOw0KCSR3ZWVrZGF5ID0gMSArICggKCRoIC0gMSkg JSA3KTsNCg0KCS8vIEZpbmQgaWYgJHRpbWUgZmFsbHMgaW4gaXNvX3llYXIgWS0xLCBpc29f d2VlayA1MiBvciA1Mw0KCWlmICgoJGRheV9vZl95ZWFyIDw9ICg4IC0gJGphbjF3ZWVrZGF5 KSkgJiYgJGphbjF3ZWVrZGF5ID4gNCkgew0KCQkkaXNvX3llYXIgPSAkeXIgLSAxOw0KCQlp ZiAoJGphbjF3ZWVrZGF5ID09IDUgfHwgKCRqYW4xd2Vla2RheSA9PSA2ICYmICRsZWFwX3By ZXYpKSB7DQoJCQkkaXNvX3dlZWsgPSA1MzsNCgkJfSBlbHNlIHsNCgkJCSRpc29fd2VlayA9 IDUyOw0KCQl9DQogICB9IGVsc2Ugew0KCQkkaXNvX3llYXIgPSAkeXI7DQoJfQ0KDQoJLy8g RmluZCBpZiAkdGltZSBmYWxscyBpbiBpc29feWVhciBZKzEsIGlzb193ZWVrIDENCglpZiAo JGlzb195ZWFyID09ICR5cikgew0KCQkkaWR4ID0gKCRsZWFwKSA/IDM2NiA6IDM2NTsNCgkJ aWYgKCAoJGlkeCAtICRkYXlfb2ZfeWVhcikgPCAoNCAtICR3ZWVrZGF5KSApIHsNCgkJCSRp c29feWVhciA9ICR5ciArIDE7DQoJCQkkaXNvX3dlZWsgPSAxOw0KCQl9DQoJfQ0KDQoJLy8g RmluZCBpZiAkdGltZSBmYWxscyBpbiBpc29feWVhciBZLCBpc29fd2VlayAxIHRocnUgNTMN CglpZiAoJGlzb195ZWFyID09ICR5cikgew0KCQkkamR4ID0gJGRheV9vZl95ZWFyICsgKDcg LSAkd2Vla2RheSkgKyAoJGphbjF3ZWVrZGF5IC0gMSk7DQoJCSRpc29fd2VlayA9ICRqZHgg LyA3Ow0KCQlpZiAoJGphbjF3ZWVrZGF5ID4gNCkgew0KCQkJJGlzb193ZWVrLS07DQoJCX0N Cgl9DQoNCgkvLyBSZXBsYWNlbWVudCBhcnJheQ0KCSRyZXBzID0gYXJyYXkoDQoJCSclVicg PT4gc3RyX3BhZCgkaXNvX3dlZWssIDIsICcwJywgU1RSX1BBRF9MRUZUKSwNCgkJJyVHJyA9 PiAkaXNvX3llYXIsDQoJCSclZycgPT4gc3Vic3RyKCRpc29feWVhciwgMiksDQoJKTsNCgly ZXR1cm4gc3RydHIoJGZvcm1hdCwgJHJlcHMpOw0KfQ0KDQovLyBBZGFwdGVkIGZyb206IGh0 dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdHJmdGltZS5waHANCmZ1bmN0aW9u IHNtZF9jYWxfcmVmb3JtYXRfd2luKCRmb3JtYXQsICR0cyA9IG51bGwpIHsNCgkvLyBPbmx5 IFdpbiBwbGF0Zm9ybXMgbmVlZCBhcHBseQ0KCWlmICghaXNfd2luZG93cygpKSByZXR1cm4g JGZvcm1hdDsNCglpZiAoISR0cykgJHRzID0gdGltZSgpOw0KDQoJJG1hcHBpbmcgPSBhcnJh eSgNCgkJJyVDJyA9PiBzcHJpbnRmKCIlMDJkIiwgZGF0ZSgiWSIsICR0cykgLyAxMDApLA0K CQknJUQnID0+ICclbS8lZC8leScsDQoJCSclZScgPT4gc3ByaW50ZigiJScgMmQiLCBkYXRl KCJqIiwgJHRzKSksDQoJCSclRicgPT4gJyVZLSVtLSVkJywNCgkJJyVnJyA9PiBzbWRfY2Fs X2lzb193ZWVrKCclZycsICR0cyksDQoJCSclRycgPT4gc21kX2NhbF9pc29fd2VlaygnJUcn LCAkdHMpLA0KCQknJWgnID0+ICclYicsDQoJCSclbCcgPT4gc3ByaW50ZigiJScgMmQiLCBk YXRlKCJnIiwgJHRzKSksDQoJCSclbicgPT4gIlxuIiwNCgkJJyVQJyA9PiBkYXRlKCdhJywg JHRzKSwNCgkJJyVyJyA9PiBkYXRlKCJoOmk6cyIsICR0cykgLiAiICVwIiwNCgkJJyVSJyA9 PiBkYXRlKCJIOmkiLCAkdHMpLA0KCQknJXMnID0+IGRhdGUoJ1UnLCAkdHMpLA0KCQknJXQn ID0+ICJcdCIsDQoJCSclVCcgPT4gJyVIOiVNOiVTJywNCgkJJyV1JyA9PiAoJHcgPSBkYXRl KCJ3IiwgJHRzKSkgPyAkdyA6IDcsDQoJCSclVicgPT4gc21kX2NhbF9pc29fd2VlaygnJVYn LCAkdHMpLA0KCSk7DQoJJGZvcm1hdCA9IHN0cl9yZXBsYWNlKA0KCQlhcnJheV9rZXlzKCRt YXBwaW5nKSwNCgkJYXJyYXlfdmFsdWVzKCRtYXBwaW5nKSwNCgkJJGZvcm1hdA0KCSk7DQoN CglyZXR1cm4gJGZvcm1hdDsNCn0NCg0KLy8gRmluZCBpZiB0aGUgaGF5c3RhY2sgY29udGFp bnMgb25lIG9mIHRoZSB2YWx1ZXMgaW4gbmVlZGxlLiBJcyB0aGVyZSBhIGNsZXZlcmVyIHdh eSB0byBkbyB0aGlzPw0KZnVuY3Rpb24gc21kX2NhbF9pbl9hcnJheSgkbmVlZGxlLCAkaGF5 c3RhY2spIHsNCglmb3JlYWNoICgkaGF5c3RhY2sgYXMgJHZhbCkgew0KCQlpZiAoaW5fYXJy YXkoJHZhbCwgJG5lZWRsZSkpIHsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJfQ0KCXJldHVy biBmYWxzZTsNCn0NCg0KLy8gQ2hlY2sgdGhlIHBhc3NlZCB0aW1lc3RhbXAgYWdhaW5zdCBl dmVyeSB0aW1lIHJlc3RyaWN0aW9uIGFuZCByZXR1cm4gdHJ1ZSBpZiBpdCBwYXNzZXMgdGhl bSBhbGwNCmZ1bmN0aW9uIHNtZF9pbmNsdWRlX2V2ZW50KCR0cywgJG5vdywgJGlnbiwgJHRp bWUsICRmcm9tLCAkdG8sICRtb250aCkgew0KCSRzaG93ID0gYXJyYXkoKTsNCgkkc2hvd1td ID0gIWluX2FycmF5KGRhdGUoImQtTS1ZIiwgJHRzKSwgJGlnbik7DQoJJHRpbWUgPSBkb19s aXN0KCR0aW1lKTsNCgkkc2hvd29yID0gZmFsc2U7DQoJZm9yZWFjaCgkdGltZSBhcyAkdG0p IHsNCgkJc3dpdGNoKCR0bSkgew0KCQkJY2FzZSAiYW55IjoNCgkJCQkkc2hvd29yID0gdHJ1 ZTsNCgkJCQlicmVhazsNCgkJCWNhc2UgImZ1dHVyZSI6DQoJCQkJJHNob3dvciA9ICRzaG93 b3IgfHwgKCgkdHMgPiAkbm93KSA/IHRydWUgOiBmYWxzZSk7DQoJCQkJYnJlYWs7DQoJCQlj YXNlICJ0b2RheSI6DQoJCQkJJHNob3dvciA9ICRzaG93b3IgfHwgKCgkdHMgPj0gc3RydG90 aW1lKGRhdGUoJ1ktbS1kIDAwOjAwOjAwJywgJG5vdykpICYmICR0cyA8PSBzdHJ0b3RpbWUo ZGF0ZSgnWS1tLWQgMjM6NTk6NTknLCAkbm93KSkpID8gdHJ1ZSA6IGZhbHNlKTsNCgkJCQli cmVhazsNCgkJCWRlZmF1bHQgOg0KCQkJCSRzaG93b3IgPSAkc2hvd29yIHx8ICgoJHRzIDwg JG5vdykgPyB0cnVlIDogZmFsc2UpOw0KCQkJCWJyZWFrOw0KCQl9DQoJfQ0KCSRzaG93W10g PSAkc2hvd29yOw0KCWlmICgkZnJvbSkgeyAkc2hvd1tdID0gKCR0cyA+PSBzYWZlX3N0cnRv dGltZSgkZnJvbSkpID8gdHJ1ZSA6IGZhbHNlOyB9DQoJaWYgKCR0bykgeyAkc2hvd1tdID0g KCR0cyA8PSBzYWZlX3N0cnRvdGltZSgkdG8pKSA/IHRydWUgOiBmYWxzZTsgfQ0KCWlmICgk bW9udGgpIHsgJHNob3dbXSA9IChkYXRlKCJZLW0iLCAkdHMpID09ICRtb250aCkgPyB0cnVl IDogZmFsc2U7IH0NCg0KCXJldHVybiAoIWluX2FycmF5KDAsICRzaG93KSkgPyB0cnVlIDog ZmFsc2U7DQp9DQoNCi8vIENvbnZlcnQgZGF0ZSByYW5nZXMgbGlrZSAyNC1PY3QtMDggPT4g NS1Ob3YtMDggdG8gYW4gYXJyYXkgb2YgZGlzY3JldGUgZGF0ZSBlbnRpdGllcw0KLy8gQWxz bywgd2Vla2RheSB2YWxzIHN1Y2ggYXMge1N1bjpNb246V2VkfSB3b3VsZCByZXR1cm4gdGhv c2UgZGF5cyBiZXR3ZWVuICRzdGFydCBhbmQgJGVuZA0KZnVuY3Rpb24gc21kX2V4cGFuZF9k YXRlcmFuZ2UoJHJhbmdlLCAkc3RhcnQ9JycsICRlbmQ9JycsICRmbXQ9JyVzJykgew0KCSRv dXQgPSBhcnJheSgpOw0KCSRybmcgPSBkb19saXN0KCRyYW5nZSwgIj0+Iik7DQoNCglpZiAo Y291bnQoJHJuZykgPiAxKSB7DQoJCS8vIFJhbmdlIGV4cGFuc2lvbg0KCQkkZGlmZiA9IHNh ZmVfc3RydG90aW1lKCRybmdbMV0pIC0gc2FmZV9zdHJ0b3RpbWUoJHJuZ1swXSk7DQoJCSRk aWZmZGF5cyA9IGNlaWwoJGRpZmYgLyAoNjAqNjAqMjQpKTsgLy8gZGF5cyBiZXR3ZWVuIGRh dGVzDQoJCWZvciAoJGpkeCA9IDA7ICRqZHggPD0gJGRpZmZkYXlzOyAkamR4KyspIHsNCgkJ CSRvdXRbXSA9IHNhZmVfc3RyZnRpbWUoJGZtdCwgc2FmZV9zdHJ0b3RpbWUoJHJuZ1swXSAu ICgoJGpkeD09MCkgPyAnJyA6ICcrJy4kamR4LicgZGF5cycpKSk7DQoJCX0NCgl9IGVsc2Ug aWYgKCRzdGFydCAmJiAkZW5kICYmIHN0cnBvcygkcmFuZ2UsICd7JykgPT09IDAgJiYgc3Ry cG9zKCRyYW5nZSwgJ30nKSA9PT0gc3RybGVuKCRyYW5nZSktMSkgew0KCQkvLyBEYXkgb2Yg d2VlayBleHBhbnNpb24NCgkJJGRheXMgPSBkb19saXN0KHRyaW0oJHJhbmdlLCd7fScpLCAn OicpOw0KCQkkZGlmZmRheXMgPSBjZWlsKCgkZW5kLSRzdGFydCkgLyAoNjAqNjAqMjQpKTsN CgkJZm9yICgkamR4ID0gMDsgJGpkeCA8PSAkZGlmZmRheXM7ICRqZHgrKykgew0KCQkJJHRt ID0gJHN0YXJ0ICsgKCRqZHgqNjAqNjAqMjQpOw0KCQkJaWYgKGluX2FycmF5KGRhdGUoJ0Qn LCAkdG0pLCAkZGF5cykpIHsNCgkJCQkkb3V0W10gPSBzYWZlX3N0cmZ0aW1lKCRmbXQsICR0 bSk7DQoJCQl9DQoJCX0NCgl9IGVsc2Ugew0KCQkvLyBTaW5nbGUgZGF0ZQ0KCQkkb3V0W10g PSBzYWZlX3N0cmZ0aW1lKCRmbXQsIHNhZmVfc3RydG90aW1lKCRybmdbMF0pKTsNCgl9DQoJ cmV0dXJuICRvdXQ7DQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7czo1OiJvcmRlciI7czoxOiI1 IjtzOjU6ImZsYWdzIjtzOjE6IjAiO3M6NDoiaGVscCI7czo2NDI5NzoiPGRpdiBpZD0ic21k X2hlbHAiPgoKCTxoMT5zbWRfY2FsZW5kYXI8L2gxPgoKCTxwPlJlbmRlciBhIGNhbGVuZGFy IHdpdGggb25lIG9yIG1vcmUgYXJ0aWNsZXMgYXMgZXZlbnRzIG9uIGVhY2ggZGF5LiBVc2Vm dWwgZm9yIGdpZyBndWlkZXMsICYjODIyMDt3aGF0JiM4MjE3O3Mgb24mIzgyMjE7IG9yIHNj aGVkdWxpbmcgYXBwcy48L3A+CgoJPGgyPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkZ1 bGwtc2l6ZSAvIG1pbmkgPGEgaHJlZj0iI3NtZGNhbCI+Y2FsZW5kYXI8L2E+IGJ5IG1vbnRo LCB3aXRoIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgc3VwcG9ydDwvbGk+ CgkJPGxpPk5hdjogbmV4dC9wcmV2IG1vbnRoIG9yIG1vbnRoL3llYXIgZHJvcGRvd24uIFll YXIgcmFuZ2UgY2FuIGJlIGZyb20gZmlyc3QvbGFzdCBhcnRpY2xlIG9yICsvLSBOIHllYXJz PC9saT4KCQk8bGk+T25lIGFydGljbGUgPSBvbmUgZXZlbnQsIG5hdGl2ZSB0byA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPjogcG9zdGVkIGRhdGUgPSB0aGUgZGF0ZSBpdCBhcHBl YXJzIGluIHRoZSBjYWxlbmRhciAob3ZlcnJpZGVhYmxlKTwvbGk+CgkJPGxpPkZpbHRlciBl dmVudHMgYnkgY2F0IC8gc2VjdGlvbiAvIGF1dGhvciAvIHN0YXR1cyAvIHRpbWUgLyBleHBp cnk8L2xpPgoJCTxsaT5TcGVjaWZ5IGV2ZW50IGZyZXF1ZW5jeSBpbiBjdXN0b20gZmllbGQg KDEgd2VlayAvIDEwIGRheXMgLyAzIG1vbnRocyAvIGV0Yyk8L2xpPgoJCTxsaT5DdXN0b20g ZmllbGRzIGZvciBpbi9leGNsdXNpb25zIChkYXRlcyBvbiB3aGljaCBhbiBldmVudCBpcyAo cmUpc2NoZWR1bGVkL2NhbmNlbGxlZC9vbWl0dGVkKTwvbGk+CgkJPGxpPk11bHRpLWRheSBz cGFubmVkIGV2ZW50cyBiYXNlZCBvbiBhcnRpY2xlIGV4cGlyeTwvbGk+CgkJPGxpPkRpc3Bs YXkgZnV0dXJlLCBleHBpcmVkIG9yIHN0aWNreSBldmVudHM8L2xpPgoJCTxsaT5Ib2xpZGF5 cyBwZXItY2FsZW5kYXI8L2xpPgoJCTxsaT5QYXNzIGVhY2ggZXZlbnQgdG8gYSBmb3JtL2Nv bnRhaW5lci4gU3Bhbm5lZCBhbmQvb3IgcmVjdXJyaW5nIGV2ZW50cyBjYW4gYmUgc2VudCB0 byBhIHNlcGFyYXRlIGZvcm0uIENlbGwgZm9ybWF0IGFsc28gY3VzdG9taXNhYmxlPC9saT4K CQk8bGk+PGEgaHJlZj0iI2lmY2FsIj5Db25kaXRpb25hbDwvYT4gdGVzdHMgZm9yIGZsYWdz IGFuZCBkYXRlcyBzbyB5b3UgY2FuIGJ1aWxkIHlvdXIgb3duIGxvZ2ljPC9saT4KCQk8bGk+ VGFibGUtLCByb3ctLCBjZWxsLSwgYW5kIGV2ZW50LWxldmVsIGNsYXNzZXMgZm9yIGluZGlj YXRpbmcgZGlmZmVyZW50IHNjZW5hcmlvczwvbGk+CgkJPGxpPlRhZ3MgdG8gPGEgaHJlZj0i I2FydGV2Ij5kaXNwbGF5IHJlY3VycmluZyBldmVudHM8L2E+IDsgZXZlbnQvY2FsZW5kYXIg PGEgaHJlZj0iI2NhbGluZm8iPmNoYXJhY3RlcmlzdGljczwvYT4gOyBvciB0aGUgPGEgaHJl Zj0iI2NhbG5vdyI+Y3VycmVudCBkYXRlL3RpbWU8L2E+PC9saT4KCTwvdWw+CgoJPGgyPkF1 dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS9jb250YWN0Ij5TdGVmIERhd3NvbjwvYT4uIEpvaW50bHkgZnVuZGVkIGJ5IGdlbmVyb3Vz IGRvbmF0b3JzOiBtcmRhbGUsIHdvb2YsIGpha29iLCByZW5vYmlyZCBhbmQgam9lYmFpY2gu IE9yaWdpbmFsbHkgYmFzZWQgb24gbWRwX2NhbGVuZGFyLiBBbGwgcHJvcHMgdG8gdGhlIG9y aWdpbmFsIGF1dGhvciwgYW5kIG9mIGNvdXJzZSB0aGUgY2xhc3MgdXBvbiB3aGljaCB0aGUg Y2FsZW5kYXIgaXMgYmFzZWQuPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxh dGlvbjwvaDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgVGV4dHBhdHRlcm4g NC40LjErPC9wPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJl Zj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEwNTIvc21kX2NhbGVuZGFyIj50 ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24u Y29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4tJmd0O1BsdWdpbnMgcGFuZSwgaW5z dGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIENyZWF0ZSBhbnkgbmVlZGVkIDxhIGhyZWY9 IiNmbGRhdHRzIj5jdXN0b20gZmllbGRzPC9hPi4gVmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6 Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yOTM3NSI+Zm9ydW0g dGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBv ciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBkZWxl dGUgZnJvbSB0aGUgQWRtaW4tJmd0O1BsdWdpbnMgcGFnZS48L3A+CgoJPGgyPk5hbWluZyBj b252ZW50aW9uPC9oMj4KCgk8cD5UaGUgY29yZSBvZiB0aGUgcGx1Z2luIGlzIHRoZSBzbWRf Y2FsZW5kYXIgdGFnLCB3aGljaCByZW5kZXJzIGEgc3RhbmRhcmQgY2FsZW5kYXIuIEVhY2gg Y2VsbCBjb250YWlucyBvbmUgb3IgbW9yZSBldmVudHMgdGhhdCBvY2N1ciBvbiB0aGF0IGRh eS4gQmVmb3JlIGRpdmluZyBpbnRvIHRoZSB0YWdzIGhlcmUgYXJlIHRoZSBiYXNpY3M6PC9w PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmNhbGlkPC9zcGFuPiA6IHlvdSBt YXkgcHV0IG1vcmUgdGhhbiBvbmUgY2FsZW5kYXIgb24gYSBwYWdlOiBlYWNoIGNhbiBiZSB1 bmlxdWVseSByZWZlcmVuY2VkIHdpdGggYSBjYWxlbmRhciBJRCBzbyB0aGV5IG1heSBiZSBj b250cm9sbGVkIGluZGVwZW5kZW50bHk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ ZXZlbnQ8L3NwYW4+IDogYW4gYXJ0aWNsZS4gQW55IGFydGljbGUgd3JpdHRlbiBpbiB0aGUg Z2l2ZW4gc2VjdGlvbihzKSB3aWxsIGFwcGVhciBvbiB0aGUgY2FsZW5kYXIgYXMgbG9uZyBh cyBpdHMgZXhwaXJ5IGhhc24mIzgyMTc7dCBiZWVuIG1ldC4gTW9yZSB0aGFuIG9uZSBldmVu dCBtYXkgYXBwZWFyIGluIGVhY2ggY2VsbDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5ldmVudCBmbGFnPC9zcGFuPiA6IGV2ZW50cyBjYW4gZWl0aGVyIGJlIDxhIGhyZWY9IiNl dmVudHMiPnN0YW5kYXJkPC9hPiwgdGhleSBjYW4gPGEgaHJlZj0iI3JlY3VyIj5yZWN1cjwv YT4sIHRoZXkgY2FuIHNwYW4gPGEgaHJlZj0iI211bHRpIj5tdWx0aXBsZTwvYT4gZGF5cywg ZGF0ZXMgY2FuIGJlIDxhIGhyZWY9IiNjYW5jZWwiPnVuc2NoZWR1bGVkIG9yIG9taXR0ZWQ8 L2E+IGZyb20gdGhlIGNhbGVuZGFyLCBvciA8YSBocmVmPSIjZXh0cmEiPmV4dHJhPC9hPiBk YXRlcyBjYW4gYmUgYWRkZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2VsbCBm bGFnPC9zcGFuPiA6IGEgc2VyaWVzIG9mIGZsYWdzIGFyZSB1c2VkIHRvIGxhYmVsIGVhY2gg Y2VsbCBhY2NvcmRpbmcgdG8gd2hhdCBpdCBjb250YWlucy4gQ2VsbHMgY2FuIGVpdGhlciBi ZSBlbXB0eSAoaS5lLiBubyBkYXRlOiB0aGUgZmlsbGVyIGNlbGxzIGF0IHRoZSBzdGFydC9l bmQgb2YgdGhlIG1vbnRoKSwgdGhleSBjYW4gYmUgYSByZWd1bGFyIGRheSAobm8gZmxhZyks IHRoZXkgY2FuIGNvbnRhaW4gYW4gZXZlbnQsIG9yIG1heSBiZSBhIDxhIGhyZWY9IiNob2xp ZGF5cyI+aG9saWRheTwvYT48L2xpPgoJPC91bD4KCgk8cD5GbGFncyBwcm92aWRlIGluZm9y bWF0aW9uIDxlbT5hYm91dDwvZW0+IHRoZSBjZWxsIC8gZXZlbnQgICYjODIxMjsgYW5kIGNh biBiZSB0ZXN0ZWQgd2l0aCB0aGUgY29uZGl0aW9uYWwgdGFnICYjODIxMjsgd2hpbGUgdGhl IGNvcnJlc3BvbmRpbmcgY2xhc3MgbmFtZXMgYXJlIGp1c3QgdGhlcmUgZm9yIHlvdXIgPHNw YW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gdXNlLjwvcD4KCgk8cD5XaGVuIGFzc2lnbmVk IGFzIGNsYXNzZXMsIGZsYWdzIDxzdHJvbmc+YWx3YXlzPC9zdHJvbmc+IHRha2UgdGhlICYj ODIxNjtjbGFzcyYjODIxNzsgcHJlZml4IChpLmUuIHRoZSAxc3QgaXRlbSBnaXZlbiBpbiBz bWRfY2FsZW5kYXImIzgyMTc7cyA8Y29kZT5jbGFzc3ByZWZpeGVzPC9jb2RlPiBhdHRyaWJ1 dGUpICYjODIxMjsgd2hldGhlciB0aGV5IGFwcGVhciBhdCB0aGUgPGVtPmV2ZW50PC9lbT4g b3IgPGVtPmNlbGw8L2VtPiBsZXZlbHMuIFRoZSBvbmx5IGNsYXNzZXMgdGhhdCB0YWtlIHRo ZSBvcHRpb25hbCAybmQgJiM4MjE2O2V2ZW50JiM4MjE3OyBwcmVmaXggYXJlIHRoZSBmaWVs ZHMgeW91IHNwZWNpZnkgaW4gdGhlIDxjb2RlPmV2ZW50Y2xhc3NlczwvY29kZT4gYXR0cmli dXRlLjwvcD4KCgk8aDIgaWQ9ImV2ZW50cyI+U3RhbmRhcmQgY2VsbHMgYW5kIGV2ZW50czwv aDI+CgoJPHA+VGhlIGZvbGxvd2luZyBjdW11bGF0aXZlIG5hbWluZyBydWxlcyBhcHBseTo8 L3A+CgoJPHVsPgoJCTxsaT5Ob3JtYWwgKGRheSkgY2VsbHMgZG9uJiM4MjE3O3QgaGF2ZSBh IGNsYXNzIGFzc2lnbmVkIHRvIHRoZW0gdW5sZXNzIHlvdSBzcGVjaWZ5IG9uZSB3aXRoIDxj b2RlPmNlbGxjbGFzczwvY29kZT48L2xpPgoJCTxsaT5BbnkgY2VsbCB0aGF0IGNvbnRhaW5z IGFuIGV2ZW50IChvZiBhbnkgdHlwZSkgaXMgZmxhZ2dlZCBhcyBhbiA8Y29kZT5ldmVudDwv Y29kZT48L2xpPgoJCTxsaT5BbnkgY2VsbCB0aGF0IGZhbGxzIG9uIGEgaG9saWRheSBpcyBn aXZlbiB0aGUgZmxhZyA8Y29kZT5ob2xzPC9jb2RlPjwvbGk+CgkJPGxpPlRoZSBjdXJyZW50 IGRheSBpcyBnaXZlbiB0aGUgZmxhZyA8Y29kZT50b2RheTwvY29kZT48L2xpPgoJPC91bD4K Cgk8cD5BIHNpbmdsZSBldmVudCAoYWthIGFydGljbGUpIHdpdGggYSBQb3N0ZWQgZGF0ZSB3 aWxsIGJlIGZsYWdnZWQgPGNvZGU+c3RhbmRhcmQ8L2NvZGU+LCB1bmxlc3MgaXQgcmVjdXJz IG9yIHNwYW5zIG1vcmUgdGhhbiBvbmUgZGF5LjwvcD4KCgk8aDIgaWQ9InJlY3VyIj5SZWN1 cnJpbmcgZXZlbnRzPC9oMj4KCgk8cD5JZiB5b3UgaGF2ZSBub21pbmF0ZWQgYSBmaWVsZCBh cyB5b3VyIDxjb2RlPnN0ZXBmaWVsZDwvY29kZT4geW91IG1heSBlbnRlciBhIGNvbW1hLXNl cGFyYXRlZCBsaXN0IG9mIGZyZXF1ZW5jaWVzIGF0IHdoaWNoIHRoZSBldmVudCBpcyB0byBy ZXBlYXQuIFRoZSBmb3JtYXQgb2YgdGhlIHJlcGV0aXRpb24gaXMgPHN0cm9uZz5udW1iZXIg aW50ZXJ2YWw8L3N0cm9uZz4sIGUuZy4gPGNvZGU+NCB3ZWVrczwvY29kZT4gb3IgPGNvZGU+ MTAgZGF5czwvY29kZT4gb3IgPGNvZGU+NiBtb250aHM8L2NvZGU+LiBUaGUgcGx1Z2luIHdp bGwgZG8gaXRzIGJlc3QgdG8gZmlndXJlIG91dCB3aGF0IHlvdSBtZWFuLiBTZWUgPGEgaHJl Zj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3Rhci9tYW51YWwvaHRtbF9ub2RlL0Rh dGUtaW5wdXQtZm9ybWF0cy5odG1sIj5kYXRlIGlucHV0IGZvcm1hdHM8L2E+IGZvciBtb3Jl LjwvcD4KCgk8cD5BIGZldyBwb2ludHM6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+c2Vjb25k IHR1ZXNkYXk8L2NvZGU+IHdpbGwgc2hvdyBhbiBldmVudCA8ZW0+ZXZlcnk8L2VtPiAybmQg VHVlc2RheSBmcm9tIHRoZSBzdGFydCBkYXRlIChpLmUuIGZvcnRuaWdodGx5KTwvbGk+CgkJ PGxpPjxjb2RlPnNlY29uZCB0dWVzZGF5ID9tb250aCA/eWVhcjwvY29kZT4gd2lsbCBzdWJz dGl0dXRlIHRoZSBjdXJyZW50IG1vbnRoIGFuZCB5ZWFyIGluIGZpcnN0LCBhbmQgdGhlbiBj YWxjdWxhdGUgdGhlIGRhdGUsIHJlc3VsdGluZyBpbiB0aGUgZXZlbnQgb25seSByZWN1cnJp bmcgb24gdGhlIDJuZCBUdWVzZGF5IG9mIGVhY2ggbW9udGguIFlvdSA8c3Ryb25nPm11c3Q8 L3N0cm9uZz4gdXNlIGJvdGggPGNvZGU+P21vbnRoPC9jb2RlPiBhbmQgPGNvZGU+P3llYXI8 L2NvZGU+IGlmIHlvdSBjaG9vc2UgdGhpcyB0eXBlIG9mIGRhdGUgb3IgeW91ciBldmVudCB3 b24mIzgyMTc7dCBhcHBlYXI8L2xpPgoJCTxsaT48Y29kZT4yMCA/bW9udGg8L2NvZGU+IHdp bGwgc2hvdyB0aGUgZXZlbnQgb24gdGhlIDIwdGggb2YgZXZlcnkgbW9udGg8L2xpPgoJCTxs aT50aGluZ3MgbGlrZSA8Y29kZT5maXJzdCB0aHVyc2RheTwvY29kZT4gb3IgPGNvZGU+bGFz dCBmcmlkYXk8L2NvZGU+IG9yIDxjb2RlPnRoaXMgdHVlc2RheTwvY29kZT4gZG9uJiM4MjE3 O3QgbmVlZCB0aGUgPGNvZGU+P21vbnRoPC9jb2RlPiBvciA8Y29kZT4/eWVhcjwvY29kZT4g YmVjYXVzZSB0aGV5IGNhbiA8ZW0+b25seTwvZW0+IG9jY3VyIG1vbnRobHksIGFuZCB3aWxs IG9ubHkgc2hvdyB0aGUgZXZlbnQgb24gdGhlIGdpdmVuIGRheSBvZiB0aGUgbW9udGg8L2xp PgoJPC91bD4KCgk8cD5JZiB5b3UgY2FuIGZpbmQgYSB1c2UgZm9yIGl0LCB5b3UgbWF5IHNw ZWNpZnkgbXVsdGlwbGUgZnJlcXVlbmNpZXMsIGZvciBleGFtcGxlIDxjb2RlPjMgZGF5cywg MSB3ZWVrPC9jb2RlPi4gVGhhdCBtZWFucyB5b3Ugd291bGQgc2VlIHRoZSBldmVudCBvbiB0 aGUgMXN0IGRheSwgdGhlbiB0aGUgM3JkLCA2dGgsIDd0aCwgOXRoLCAxMnRoLCAxNHRoLCAx NXRoLCAxOHRoLCAyMXN0LCAyNHRoJiM4MjMwOyBkYXlzIHRoZXJlYWZ0ZXIuIE5vdGUgdGhh dCB0aGUgZXZlbnQgb25seSBvY2N1cnMgb25jZSBvbiB0aGUgMjFzdCBkYXkgZXZlbiB0aG91 Z2ggdGhlIHR3byBmcmVxdWVuY2llcyBjbGFzaC48L3A+CgoJPHA+UmVjdXIgcnVsZXM6PC9w PgoKCTx1bD4KCQk8bGk+VGhlIHJlcGV0aXRpb24gd2lsbCBjb250aW51ZSBmb3JldmVyPHN1 cCBpZD0iZm5yZXYxODQ5MDg3NjMwNGRmZmMwMzNiOTI5NSIgY2xhc3M9ImZvb3Rub3RlIj48 YSBocmVmPSIjZm4xODQ5MDg3NjMwNGRmZmMwMzNiOTI5NSI+MTwvYT48L3N1cD4gdW5sZXNz IHlvdSBzcGVjaWZ5IGFuIGV4cGlyeSB0aW1lPC9saT4KCQk8bGk+VGhlIHZlcnkgZmlyc3Qg ZXZlbnQgb2YgYSByZWN1cnJpbmcgc2V0IHdpbGwgYmUgZmxhZ2dlZCB3aXRoIDxjb2RlPnJl Y3VyZmlyc3Q8L2NvZGU+PC9saT4KCQk8bGk+RWFjaCBmb2xsb3dpbmcgY2VsbCB0aGF0IGNv bnRhaW5zIGEgcmVjdXJyaW5nIGV2ZW50IHdpbGwgYmUgZmxhZ2dlZCB3aXRoIDxjb2RlPnJl Y3VyPC9jb2RlPjwvbGk+CgkJPGxpPkJvdGggZmxhZ3MgYXJlIGFwcGxpZWQgdG8gdGhlIGV2 ZW50IGFzIGNsYXNzZXMgdXNpbmcgdGhlIGNsYXNzIHByZWZpeDwvbGk+CgkJPGxpPlJlcGVh dGVkIGV2ZW50cyBtYXkgYmUgPGEgaHJlZj0iI2NhbmNlbCI+Y2FuY2VsbGVkIG9yIG9taXR0 ZWQ8L2E+IG9uIGEgcGVyLWRhdGUgYmFzaXM8L2xpPgoJPC91bD4KCgk8cCBjbGFzcz0ic21h bGwiIGlkPSJmbjE4NDkwODc2MzA0ZGZmYzAzM2I5Mjk1Ij48c3VwPjE8L3N1cD4gJiM4MjE2 O2ZvcmV2ZXImIzgyMTc7IGlzIGxpbWl0ZWQgdG8gOTk5OTkgcmVjdXJyZW5jZXMgcGVyIGV2 ZW50LCBvciAyNzQgeWVhcnMmIzgyMTc7IHdvcnRoIG9mIGRhaWx5IGV2ZW50cy4gRWl0aGVy IDxzcGFuIGNsYXNzPSJjYXBzIj5VTklYPC9zcGFuPiB3aWxsIHJ1biBvdXQgb2YgZGF0ZXMg b3IgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gd2lsbCBydW4gb3V0IG9mIG1lbW9y eSBsb25nIGJlZm9yZSB5b3UgcmVhY2ggdGhpcyBsaW1pdCA6LSk8L3A+CgoJPGgyIGlkPSJt dWx0aSI+TXVsdGktZGF5IChzcGFubmVkKSBldmVudHM8L2gyPgoKCTxwPkFueSBldmVudCB0 aGF0IGhhczo8L3A+CgoJPHVsPgoJCTxsaT5hIHN0YXJ0IGRhdGU8L2xpPgoJCTxsaT5hbiBl eHBpcnkgZGF0ZSB0aGF0IGlzIGEgZGF5IG9yIG1vcmUgbGF0ZXIgdGhhbiB0aGUgc3RhcnQg ZGF0ZSwgYW5kPC9saT4KCQk8bGk+PGVtPmRvZXMgbm90PC9lbT4gaGF2ZSBhbnkgcmVwZXRp dGlvbiBpbiBpdHMgPGNvZGU+c3RlcGZpZWxkPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPmlz IGZsYWdnZWQgYXMgYSA8Y29kZT5tdWx0aTwvY29kZT4uIEJ5IGRlZmF1bHQgdGhlIGZpcnN0 IGV2ZW50IGlzIGRpc3BsYXllZCBpbiBmdWxsIGFuZCBlYWNoICYjODIxNjtjb250aW51YXRp b24mIzgyMTc7IGV2ZW50IGlzIHNob3duIG9ubHkgYXMgYSByaWdodCBhcnJvdyBpbiBzdWJz ZXF1ZW50IGNlbGxzLiBFdmVudHMgbWF5IHNwYW4gbW9udGhzIG9yIHllYXJzIGFuZCB0aGUg cGx1Z2luIGZpZ3VyZXMgZXZlcnl0aGluZyBvdXQgdXNpbmcgZmxhZyBydWxlczo8L3A+CgoJ PHVsPgoJCTxsaT5UaGUgZmlyc3QgY2VsbCBvZiBhIHNwYW5uZWQgc2V0IGlzIDxjb2RlPm11 bHRpZmlyc3Q8L2NvZGU+PC9saT4KCQk8bGk+VGhlIGxhc3QgY2VsbCBpcyA8Y29kZT5tdWx0 aWxhc3Q8L2NvZGU+PC9saT4KCQk8bGk+RXZlcnkgb3RoZXIgY2VsbCBpcyBhIDxjb2RlPm11 bHRpPC9jb2RlPiA8ZW0+ZXhjZXB0PC9lbT4gaWYgdGhlIGV2ZW50IHJvbGxzIG92ZXIgaW50 byB0aGUgbmV4dCBtb250aC4gSW4gdGhhdCBjYXNlLCB0aGUgZW50cnkgb24gdGhlIDFzdCBv ZiB0aGUgbW9udGggaXMgYSA8Y29kZT5tdWx0aXByZXY8L2NvZGU+IHRvIGluZGljYXRlIGl0 IGJlbG9uZ3MgdG8gYSBwcmV2aW91cyBldmVudDwvbGk+CgkJPGxpPklmIHRoZSAxc3QgZGF5 IG9mIHRoZSBtb250aCBpcyB0aGUgbGFzdCBkYXkgb2YgdGhlIGV2ZW50LCB0aGUgPGNvZGU+ bXVsdGlwcmV2PC9jb2RlPiBpcyBkcm9wcGVkIGluIGZhdm91ciBvZiA8Y29kZT5tdWx0aWxh c3Q8L2NvZGU+PC9saT4KCTwvdWw+CgoJPHA+U3dpdGNoIG9mZiBzcGFubmluZyBjb21wbGV0 ZWx5IHdpdGggPGNvZGU+c2hvd3NwYW5uZWQ9JnF1b3Q7MCZxdW90OzwvY29kZT4uIEV2ZW50 cyB0aGF0IGhhdmUgYW4gZXhwaXJ5IHRoZW4gYmVjb21lIHN0YW5kYXJkIGV2ZW50cy48L3A+ CgoJPHA+JiM4MjE2O0NvbnRpbnVhdGlvbiYjODIxNzsgY2VsbHMgbWF5IGJlIHByb2Nlc3Nl ZCB3aXRoIGEgc2VwYXJhdGUgZm9ybSAoPGNvZGU+c3BhbmZvcm08L2NvZGU+KS4gSWYgeW91 IGNob29zZSBub3QgdG8gdXNlIGEgPGNvZGU+c3BhbmZvcm08L2NvZGU+LCB0aGUgc3RhbmRh cmQgPGNvZGU+Zm9ybTwvY29kZT4gb3IgY29udGFpbmVyIHdpbGwgYmUgdXNlZCBhbmQgeW91 IHdpbGwgaGF2ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgbXVsdGkg ZmxhZ3MgeW91cnNlbGYgdXNpbmcgdGhlIDxhIGhyZWY9IiNpZmNhbCI+Y29uZGl0aW9uYWwg dGFnPC9hPi48L3A+CgoJPHA+WW91IGNhbiBhbHNvIDxhIGhyZWY9IiNjYW5jZWwiPmNhbmNl bCBvciBvbWl0PC9hPiBkYXlzIG9mIGEgc3Bhbm5lZCBldmVudCBpbiB0aGUgc2FtZSBtYW5u ZXIgYXMgeW91IGRvIHdpdGggPGEgaHJlZj0iI3JlY3VyIj5yZWN1cnJpbmcgZXZlbnRzPC9h PiwgZXhjZXB0IHlvdSBjYW5ub3QgY2FuY2VsIHRoZSBmaXJzdCBkYXk7IHlvdSBzaG91bGQg bW92ZSB0aGUgZXZlbnQgc3RhcnQgZGF0ZSBhbmQgYXBvbG9naXNlITwvcD4KCgk8aDIgaWQ9 ImNhbmNlbCI+Q2FuY2VsbGluZyBhbmQgb21pdHRpbmcgZXZlbnRzPC9oMj4KCgk8cD5QbGFu cyBjaGFuZ2UgYW5kIHlvdSBtYXkgZmluZCB0aGF0IGEgZ2lnIGhhcyB0byBiZSBjYW5jZWxs ZWQuIFBlcmhhcHMgeW91IGFkdmVydGlzZSBhIHdlZWtseSBib290IGZhaXIgYnV0IHRoZSBm aWVsZCBpcyB3YXRlcmxvZ2dlZCBvbmUgd2Vlay4gTm8gcHJvYmxlbTogbm9taW5hdGUgYSA8 Y29kZT5za2lwZmllbGQ8L2NvZGU+IGluIHlvdXIgPGNvZGU+c21kX2NhbGVuZGFyPC9jb2Rl PiB0YWcgYW5kIGVudGVyIHRoZSBkYXRlIG9mIHRoZSBjYW5jZWxsZWQgZXZlbnQuPC9wPgoK CTxwPk9yIHlvdSBtaWdodCBydW4gYSB0aGVhdHJlIHdlYiBzaXRlIHRoYXQgaGFzIGEgdGhy ZWUtd2VlayBwcm9kdWN0aW9uIHBlcmZvcm1hbmNlIG9uIHdlZWtuaWdodHMgb25seS4gSW5z dGVhZCBvZiBzZXR0aW5nIHVwIHRocmVlIHNlcGFyYXRlIGV2ZW50cyAmIzgyMTI7IG9uZSBm b3IgZWFjaCB3ZWVrICYjODIxMjsgbm9taW5hdGUgYW4gPGNvZGU+b21pdGZpZWxkPC9jb2Rl PiBhbmQgbGlzdCB0aGUgZGF0ZXMgb24gd2hpY2ggdGhlIHBlcmZvcm1hbmNlIGRvZXMgbm90 IGFpci4gT21pdHRlZCBkYXRlcyB3aWxsIG5vdCwgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMs IGFwcGVhciBvbiB0aGUgY2FsZW5kYXIgYW5kIHRoZXkgb3ZlcnJpZGUgY2FuY2VsbGVkIGRh dGVzL2hvbGlkYXlzLiBJZiA8Y29kZT5jZWxscGx1czwvY29kZT4gbW9kZSBpcyB1c2VkLCB5 b3Ugd2lsbCBob3dldmVyIHNlZSBhIGNlbGwgZmxhZyBsYWJlbGxlZCA8Y29kZT5vbWl0PC9j b2RlPiAocGx1cyBjbGFzcyBwcmVmaXgpIGluIGNhc2UgeW91IGRvIHdpc2ggdG8gc3R5bGUg c3VjaCBjZWxscy48L3A+CgoJPHA+VG8gc3BlY2lmeSB0aGUgZGF0ZXMgaW4gZWl0aGVyIGZp ZWxkLCB1c2UgYW55IGFjY2VwdGFibGUgZGF0ZSBmb3JtYXQsIGJ1dCBkZXJpdmF0aXZlcyBv ZiBkZC1tb250aG5hbWUteXl5eSBvciBtb250aG5hbWUtZGQteXl5eSBhcmUgdGhlIG1vc3Qg dW5hbWJpZ3VvdXMgdG8gYXZvaWQgcHJvYmxlbXMgKGUuZy4gaXMgPGNvZGU+MS81PC9jb2Rl PiBKYW4gNXRoIG9yIE1heSAxc3QpLiBZb3UgY2FuIHNwZWNpZnkgYXMgbWFueSBjYW5jZWxs YXRpb25zIG9yIG9taXNzaW9ucyBhcyB5b3UgbGlrZTsgY29tbWEtc2VwYXJhdGUgZWFjaCBv bmUuIFlvdSBtYXkgYWxzbyBzcGVjaWZ5IHJhbmdlcyBvZiBkYXRlcyB0byBvbWl0L2NhbmNl bCBieSB1c2luZyB0aGUgbm90YXRpb24gPGNvZGU+c3RhcnQgZGF0ZSA9Jmd0OyBlbmQgZGF0 ZTwvY29kZT4uPC9wPgoKCTxwPkJ5IGRlZmF1bHQsIGNhbmNlbGxlZCBldmVudHMgd2lsbCBu b3QgYXBwZWFyIG9uIHRoZSBjYWxlbmRhci4gSWYgeW91IHVzZSA8Y29kZT5zaG93c2tpcHBl ZD0mcXVvdDsxJnF1b3Q7PC9jb2RlPiB0aGUgZXZlbnQgd2lsbCBhcHBlYXIgaW4gdGhlIGNl bGwgYXMgbm9ybWFsIGFuZCB0aGUgPGNvZGU+Y2FuY2VsPC9jb2RlPiBmbGFnIHdpbGwgYXBw bHkgdG8gdGhlIGV2ZW50IChhbmQgY2VsbCBpZiB5b3UgY2hvb3NlKSBzbyB5b3UgbWF5IGRl dGVjdC9zdHlsZSBpdC48L3A+CgoJPGgyIGlkPSJleHRyYSI+RXh0cmEgZGF0ZXM8L2gyPgoK CTxwPldoZW4gZXZlbnRzIGFyZSA8YSBocmVmPSIjY2FuY2VsIj5jYW5jZWxsZWQ8L2E+IHlv dSBtYXkgZWxlY3QgdG8gcmVzY2hlZHVsZSB0aGUgZXZlbnQgb24gYSBkaWZmZXJlbnQgZGF0 ZSBpbnN0ZWFkIG9mIGhhdmluZyB0byBjcmVhdGUgYSBuZXcgZXZlbnQgd2l0aCBpZGVudGlj YWwgZGV0YWlscy4gVXNlIHRoZSA8Y29kZT5leHRyYWZpZWxkPC9jb2RlPiB0byBzaW1wbHkg YWRkIGl0IHRvIHRoZSBjYWxlbmRhciBvbiBpdHMgbmV3IGRheS4gWW91IG1pZ2h0IGFsc28g dXNlIHRoaXMgZmVhdHVyZSBpZiB5b3UgaGF2ZSBhIDxhIGhyZWY9IiNyZWN1ciI+cmVjdXJy aW5nPC9hPiBldmVudCBvbiB0aGUgMXN0IG9mIGV2ZXJ5IG1vbnRoIGJ1dCBmb3Igc29tZSBy ZWFzb24geW91IGhhdmUgdG8gbW92ZSBvbmUgb2YgdGhlIGV2ZW50cyBhIGRheSBvciB0d28u IFNpbXBseSBjYW5jZWwgdGhlIG9mZmVuZGluZyBkYXRlIGFuZCBhZGQgdGhlIG5ldyBkYXRl IHVzaW5nIDxjb2RlPmV4dHJhZmllbGQ8L2NvZGU+LjwvcD4KCgk8cD5UaGUgbGlzdCBvZiBk YXRlcyBjYW4gYmUgaW4gYW55IHN0YW5kYXJkIGRhdGUgZm9ybWF0IChpbmNsdWRpbmcgZGF0 ZSByYW5nZXMgdXNpbmcgPGNvZGU+c3RhcnQgPSZndDsgZW5kPC9jb2RlPikuIFRoZXkgd2ls bCBiZSBhZGRlZCB0byB0aGUgY2FsZW5kYXIgYW5kIGZsYWdnZWQgYXMgPGNvZGU+ZXh0cmE8 L2NvZGU+LiBBbHNvIHNlZSB0aGUgPGNvZGU+ZXh0cmFzdHJpY3Q8L2NvZGU+IGF0dHJpYnV0 ZS48L3A+CgoJPHA+SWYgeW91ciBvcmlnaW5hbCBldmVudCBzcGFucyBtb3JlIHRoYW4gb25l IGRheSwgeW91IG1heSBlbGVjdCB0byBzY2hlZHVsZSB0aGUgZW50aXJlIGJsb2NrIGFnYWlu LiBBZGQgYSAmIzgyMTY7KyYjODIxNzsgYWZ0ZXIgYW55IGRhdGUgeW91IHdpc2ggdG8gcmVw ZWF0IGluIGl0cyBlbnRpcmV0eSwgZS5nLiA8Y29kZT4yMDA5LU1hci0xMissIDIwMDktSnVu LTE4KywgMjAwOS1GZWItMTk8L2NvZGU+IHdvdWxkIGNvcHkgdGhlIGVudGlyZSBldmVudCBi bG9jayB0byBNYXJjaCBhbmQgSnVuZSwgYnV0IG9ubHkgdGhlIDFzdCBkYXRlIHRvIEZlYiAx OXRoLiBFdmVudHMvY2VsbHMgYXJlIGZsYWdnZWQgYXMgYm90aCA8Y29kZT5leHRyYTwvY29k ZT4gYW5kIDxjb2RlPm11bHRpPC9jb2RlPiB3aGVyZSBhcHBsaWNhYmxlLjwvcD4KCgk8cD5O b3Rlczo8L3A+CgoJPHVsPgoJCTxsaT5pZiB5b3Ugc2NoZWR1bGUgYW4gZXh0cmEgZXZlbnQg b24gYSBkYXkgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIHRoZSBzYW1lIGV2ZW50IChwZXJoYXBz IG9uIGEgc3Bhbm5lZCBvciByZWN1cnJpbmcgZGF0ZSkgeW91IG1heSBzZWUgdHdvIGlkZW50 aWNhbCBldmVudHMgb24gdGhlIHNhbWUgZGF5LiBUcnkgYW5kIGF2b2lkIHRoaXMsIHVubGVz cyBpdCYjODIxNztzIHlvdXIgaW50ZW5kZWQgYmVoYXZpb3VyPC9saT4KCQk8bGk+ZGF0ZSBy YW5nZXMgYW5kIHRoZSAmIzgyMTY7KyYjODIxNzsgc3ludGF4IGFyZSBtdXR1YWxseSBleGxj dXNpdmUgb24gYW55IGRhdGUgKGUuZy4gPGNvZGU+MjAwOS1NYXItMTArID0mZ3Q7IDIwMDkt TWFyLTE1PC9jb2RlPiBpcyBpbGxlZ2FsKTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iaG9saWRh eXMiPkhvbGlkYXlzPC9oMj4KCgk8cD5QdWJsaWMgaG9saWRheXMgbmVlZCBub3QgYmUgYSBu dWlzYW5jZSB0byB5b3VyIGV2ZW50cy4gR2l2ZSB0aGUgcGx1Z2luIGEgaG9saWRheSBsaXN0 IGFuZCBpdCYjODIxNztsbCBtYWtlIHN1cmUgYW55IHJlY3VycmluZyBvciBtdWx0aSBldmVu dHMgYXJlIG5vdCBzY2hlZHVsZWQgb24gdGhvc2UgZGF5cy4gPGEgaHJlZj0iI2V2ZW50cyI+ U3RhbmRhcmQ8L2E+IG9uZS1vZmYgZXZlbnRzIGFyZSBwZXJtaXR0ZWQgYnkgZGVmYXVsdCBi ZWNhdXNlIHlvdSBtaWdodCB3YW50IHRvIG9yZ2FuaXNlIGEgc3BlY2lhbCBldmVudCBvbiB0 aGF0IGRheSwgdGhvdWdoIHlvdSBjYW4gZm9yYmlkIHRob3NlIHRvbyBpZiB5b3Ugd2lzaC48 L3A+CgoJPHA+VGhlIGxpc3Qgb2YgZGF0ZXMgeW91IHNwZWNpZnkgY2FuIGJlIGVudGVyZWQg ZGlyZWN0bHkgaW4gYSBzdHJpbmcgaW4gdGhlIDxjb2RlPmhvbGlkYXlzPC9jb2RlPiBhdHRy aWJ1dGUgb3IgaW4gYSA8Y29kZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2RlPjo8L3A+ Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnZhcmlh YmxlIG5hbWU9JnF1b3Q7bmF0X2hvbHMmcXVvdDsKICAgICB2YWx1ZT0mcXVvdDtEZWMgMjUs IDI2IERlYywgMzEvRGVjLCBKYW4tMSwKICAgICAgICBNYXkgNCAyMDA5LCAyMDA5LTA4LTMx JnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6c21kX2NhbGVuZGFyIGhvbGlkYXlzPSZxdW90O3R4cHZh cjpuYXRfaG9scyZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+VGhhdCBsaXN0IHNo b3dzIHNvbWUgb2YgdGhlIHZhcmlldHkgYW5kIGJyZWFkdGggb2YgZm9ybWF0cyB0aGUgcGx1 Z2luIGFsbG93cy4gVGhlcmUgYXJlIG1vcmUuIE5vdGUgdGhhdCB0aGUgZXZlbnRzIHdpdGhv dXQgYSB5ZWFyIG9jY3VyIG9uIHRoZSBzYW1lIGRhdGUgZXZlcnkgeWVhciwgd2hlcmVhcyB0 aGUgb25lcyB3aXRoIGEgeWVhciB3aWxsIG9ubHkgb2NjdXIgb24gdGhhdCBzcGVjaWZpYyBk YXRlLjwvcD4KCgk8cD5PbmNlIHlvdXIgZGF0ZXMgYXJlIGRlZmluZWQgeW91IGNhbiBjb250 cm9sIHdoaWNoIGV2ZW50cyBhcmUgYWxsb3dlZCB0byBmYWxsIG9uIHRob3NlIGRhdGVzIHZp YSA8Y29kZT5ob2xpZGF5ZmxhZ3M8L2NvZGU+LiBDb21iaW5pbmcgdGhhdCBhdHRyaWJ1dGUs IDxjb2RlPnNob3dzcGFubmVkPC9jb2RlPiwgPGNvZGU+c2hvd3NraXBwZWQ8L2NvZGU+IGFu ZCB0aGUgZm9ybXMgJiM4MjEyOyBhbG9uZyB3aXRoIHRoZSBjb25kaXRpb25hbCB0YWcgJiM4 MjEyOyBjYW4gZ2l2ZSBhIHdpZGUgdmFyaWV0eSBvZiB3YXlzIHRvIGRpc3BsYXkgZXZlbnRz IGFuZCBjZWxscy48L3A+CgoJPHA+SG9saWRheSBjZWxscyBhcmUgZ2l2ZW4gdGhlIGZsYWcg PGNvZGU+aG9sczwvY29kZT4sIGFuZCBhbnkgZXZlbnQgdGhhdCBpcyBub3Qgc3BlY2lmaWNh bGx5IHBlcm1pdHRlZCBieSB0aGUgPGNvZGU+aG9saWRheWZsYWdzPC9jb2RlPiBpcyBhdXRv bWF0aWNhbGx5IGFzc2lnbmVkIGEgPGNvZGU+Y2FuY2VsPC9jb2RlPiBmbGFnIGlmIGl0IGZh bGxzIG9uIG9uZSBvZiB0aGUgZGF5cy4gT21pdHRlZCBkYXRlcyB3aWxsLCBob3dldmVyLCBj YXVzZSB0aGUgPGNvZGU+Y2FuY2VsPC9jb2RlPiBmbGFnIHRvIGJlIHJlbW92ZWQuPC9wPgoK CTxoMiBpZD0ic21kY2FsIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2NhbGVuZGFyIC8mZ3Q7 PC9jb2RlPjwvaDI+CgoJPHA+UHV0IHRoaXMgdGFnIHdoZXJldmVyIHlvdSB3YW50IHlvdXIg Y2FsZW5kYXIgdG8gYXBwZWFyLiBVc2UgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIGNv bnRyb2wgaXRzIG91dHB1dC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdW5zZXQgdW5sZXNzIHN0 YXRlZCBvdGhlcndpc2UuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyI+RGlzcGxheSBhdHRyaWJ1 dGVzPC9oMz4KCgk8ZGw+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zaXplPC9zcGFuPjwv ZHQ+CgkJPGRkPkNhbGVuZGFyIHNpemUuIE9wdGlvbnM6Cgk8ZGw+CgkJPGRkPmxhcmdlPC9k ZD4KCQk8ZGQ+c21hbGw8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5UaGUgc21hbGwgaXMgbW9y ZSBnZWFyZWQgdG93YXJkcyBhIG1pbmljYWwsIGFsdGhvdWdoIGZ1bmN0aW9uYWxseSB0aGVy ZSA8YSBocmVmPSIjc2l6ZWRpZmYiPmlzbiYjODIxNzt0IG11Y2ggYmV0d2VlbiB0aGVtPC9h PjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IGxhcmdlPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0 bm0iPmZpcnN0ZGF5PC9zcGFuPjwvZHQ+CgkJPGRkPkZpcnN0IGRheSBvZiB0aGUgd2VlayB0 byBzaG93IGluIHRoZSBjYWxlbmRhci4gMD1TdW5kYXksIDE9TW9uZGF5ICYjODIzMDsgNj1T YXR1cmRheTwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDA8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+ZGF5Zm9ybWF0PC9zcGFuPjwvZHQ+CgkJPGRkPldheSBpbiB3aGljaCBkYXkgbmFt ZXMgYXJlIHJlbmRlcmVkLiBPcHRpb25zOgoJPGRsPgoJCTxkZD48c3BhbiBjbGFzcz0iY2Fw cyI+QUJCUjwvc3Bhbj4gc2hvd3MgYWJicmV2aWF0ZWQgZGF5IG5hbWVzOyBNb24sIFR1ZSwg V2VkLCBldGM8L2RkPgoJCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+RlVMTDwvc3Bhbj4gdXNl cyBmdWxsIG5hbWVzPC9kZD4KCQk8ZGQ+QW55IHZhbGlkIDxhIGhyZWY9Imh0dHA6Ly91azIu cGhwLm5ldC9zdHJmdGltZSI+c3RyZnRpbWUoKTwvYT4gY29kZXMuIExvY2FsZS1zcGVjaWZp YyBuYW1lcyBhcmUgcmV0dXJuZWQ8L2RkPgoJCTxkZD5BIGNvbW1hLXNlcGFyYXRlZCBsaXN0 IG9mIGN1c3RvbSBkYXkgbmFtZXMgc3Vycm91bmRlZCBieSA8Y29kZT57fTwvY29kZT4gYnJh Y2tldHM8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5FeGFtcGxlLCBmb3IgdHdvLWxldHRlciBH ZXJtYW4gd2Vla2RheXM6IDxjb2RlPmRheWZvcm1hdD0mcXVvdDt7U28sTW8sRGksTWksRG8s RnIsU2F9JnF1b3Q7PC9jb2RlPi4gVGhlIGZpcnN0IGRheSBpbiB0aGUgbGlzdCA8c3Ryb25n Pm11c3Q8L3N0cm9uZz4gcmVwcmVzZW50IFN1bmRheSBvciB0aGluZ3Mgd2lsbCBicmVhazwv ZGQ+CgkJPGRkPkRlZmF1bHQ6IDxzcGFuIGNsYXNzPSJjYXBzIj5BQkJSPC9zcGFuPjwvZGQ+ CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5tb250aGZvcm1hdDwvc3Bhbj48L2R0PgoJCTxk ZD5XYXkgaW4gd2hpY2ggdGhlIG1vbnRoIG5hbWVzIGFyZSByZW5kZXJlZC4gT3B0aW9uczoK CTxkbD4KCQk8ZGQ+PHNwYW4gY2xhc3M9ImNhcHMiPkZVTEw8L3NwYW4+IHNob3dzIGZ1bGwg bW9udGggbmFtZXM8L2RkPgoJCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+QUJCUjwvc3Bhbj4g dXNlcyBhYmJyZXZpYXRlZCBuYW1lczwvZGQ+CgkJPGRkPkFueSB2YWxpZCBzdHJmdGltZSgp IGNvZGVzLiBMb2NhbGUtc3BlY2lmaWMgbmFtZXMgYXJlIHJldHVybmVkPC9kZD4KCQk8ZGQ+ QSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjdXN0b20gbW9udGggbmFtZXMgc3Vycm91bmRl ZCBieSA8Y29kZT57fTwvY29kZT4gYnJhY2tldHM8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5F eGFtcGxlLCBmb3Igc2luZ2xlLWxldHRlciBtb250aCBuYW1lczogPGNvZGU+bW9udGhmb3Jt YXQ9JnF1b3Q7e0osRixNLEEsTSxKLEosQSxTLE8sTixEfSZxdW90OzwvY29kZT4uIFRoZSBm aXJzdCBtb250aCBpbiB0aGUgbGlzdCA8c3Ryb25nPm11c3Q8L3N0cm9uZz4gcmVwcmVzZW50 IEphbnVhcnkgb3IgdGhpbmdzIHdpbGwgYnJlYWs8L2RkPgoJCTxkZD5EZWZhdWx0OiA8c3Bh biBjbGFzcz0iY2FwcyI+RlVMTDwvc3Bhbj48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRu bSI+c2VsZWN0PC9zcGFuPjwvZHQ+CgkJPGRkPlVzZSBhIHNlbGVjdCBkcm9wZG93biBmb3Ig cmFwaWQgYWNjZXNzIHRvIHdlZWtzLCBtb250aHMgb3IgeWVhcnMgaW5zdGVhZCBvZiBmaXhl ZCBuYW1lcy4gQ2hvb3NlIG9uZSBvciBtb3JlIG9mOgoJPGRsPgoJCTxkZD53ZWVrPC9kZD4K CQk8ZGQ+bW9udGg8L2RkPgoJCTxkZD55ZWFyPC9kZD4KCTwvZGw+PC9kZD4KCQk8ZGQ+Tm90 ZTogd2VlayBhbmQgbW9udGggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZTwvZGQ+CgkJPGRkPllv dSBtYXkgYWxzbyBzcGVjaWZ5IHVwIHRvIHR3byBleHRyYSBhcmd1bWVudHMsIHNlcGFyYXRl ZCBieSA8Y29kZT46PC9jb2RlPiBjaGFycy4gVGhlc2UgYWRkIHRleHQgaW4gZnJvbnQgb2Yg YW5kIGJlaGluZCB0aGUgd2Vlay9tb250aC95ZWFyLCByZXNwZWN0aXZlbHk8L2RkPgoJCTxk ZD5FeGFtcGxlOiA8Y29kZT5zZWxlY3Q9JnF1b3Q7d2VlazpXRUVLIywgeWVhcjombHQ7OiZn dDsmcXVvdDs8L2NvZGU+IGRpc3BsYXlzIGEgc2VsZWN0IGxpc3Qgd2l0aCBlbnRyaWVzIGxp a2UgdGhpczogPGNvZGU+V0VFSyMxNSAmbHQ7MjAwOSZndDs8L2NvZGU+PC9kZD4KCQk8ZHQ+ PHNwYW4gY2xhc3M9ImF0bm0iPnNlbGVjdGJ0bjwvc3Bhbj48L2R0PgoJCTxkZD5BZGQgYSBk ZWRpY2F0ZWQgc3VibWl0IGJ1dHRvbiB0byB3ZWVrL21vbnRoL3llYXIgc2VsZWN0IGxpc3Rz LiBTcGVjaWZ5IHRoZSB0ZXh0IHlvdSB3aXNoIHRvIGFwcGVhciBvbiB0aGUgYnV0dG9uLiBJ dCB3aWxsIGhhdmUgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIG5h bWUgPGNvZGU+c21kX2NhbF9pbnB1dDwvY29kZT48L2RkPgoJCTxkZD5EZWZhdWx0OiB1bnNl dCAoaS5lLiBhdXRvLXN1Ym1pdCBvbiBzZWxlY3QgbGlzdCBjaGFuZ2UpPC9kZD4KCQk8ZHQ+ PHNwYW4gY2xhc3M9ImF0bm0iPmlzb3dlZWtzPC9zcGFuPjwvZHQ+CgkJPGRkPlNob3cgPHNw YW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBudW1iZXJzIGFzIGEgY29sdW1uIGF0 IHRoZSBzdGFydCBvZiB0aGUgY2FsZW5kYXIuIEFueSB0ZXh0IGluIHRoaXMgYXR0cmlidXRl IGVuYWJsZXMgdGhlIGZlYXR1cmUsIGFuZCBiZWNvbWVzIHRoZSBoZWFkaW5nIG9mIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIGNvbHVtbjwvZGQ+CgkJPGRkPllv dSBtYXkgY2hhbmdlIHRoZSBkZWZhdWx0IHdlZWsgbnVtYmVyIGluIGVhY2ggY2VsbCBieSBh ZGRpbmcgYSBjb21tYSBhbmQgc29tZSB0ZXh0OyB3aGF0ZXZlciB5b3UgZW50ZXIgd2lsbCBi ZSBwdXQgaW4gZWFjaCA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIGNlbGwu IFVzZSB0aGUgZm9sbG93aW5nIHJlcGxhY2VtZW50IGNvZGVzIGluIHlvdXIgbWFya3VwIHRv IGluc2VydCB0aGUgcmVsZXZhbnQgaW5mbzoKCTxkbD4KCQk8ZGQ+e3dlZWt9PC9kZD4KCQk8 ZGQ+e21vbnRofTwvZGQ+CgkJPGRkPnt5ZWFyfTwvZGQ+CgkJPGRkPntpc295ZWFyfTwvZGQ+ Cgk8L2RsPjwvZGQ+CgkJPGRkPkV4YW1wbGU6IDxjb2RlPmlzb3dlZWtzPSZxdW90O3drLCAj e3dlZWt9JnF1b3Q7PC9jb2RlPiB3aWxsIHB1dCAmIzgyMTY7d2smIzgyMTc7IGF0IHRoZSB0 b3Agb2YgdGhlIGNvbHVtbiBhbmQgc29tZXRoaW5nIGxpa2UgPGNvZGU+IzI0PC9jb2RlPiwg PGNvZGU+IzI1PC9jb2RlPiwgPGNvZGU+IzI2PC9jb2RlPiYjODIzMDsgYmVuZWF0aCBpdC4g SWYgdGhlIGZpcnN0IGl0ZW0gaXMgb21pdHRlZCwgdGhlcmUgd2lsbCBiZSBubyBjb2x1bW4g aGVhZGluZzwvZGQ+CgkJPGRkPk5vdGUgdGhhdCBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxl ZCwgPGNvZGU+Zmlyc3RkYXk8L2NvZGU+IHdpbGwgYmUgZm9yY2VkIHRvIHN0YXJ0IG9uIGEg TW9uZGF5IGFzIGdvdmVybmVkIGJ5IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFu PiBzcGVjaWZpY2F0aW9uPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm5hdmFycm93 PC9zcGFuPjwvZHQ+CgkJPGRkPkNvbW1hLXNlcGFyYXRlZCBwYWlyIG9mIGl0ZW1zIHlvdSB3 YW50IHRvIGFwcGVhciBhcyBwcmV2L25leHQgYXJyb3dzIGluIHRoZSBjYWxlbmRhcjwvZGQ+ CgkJPGRkPkRlZmF1bHQ6IDxjb2RlPiZhbXA7IzYwOywgJmFtcDsjNjI7PC9jb2RlPjwvZGQ+ CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5jYXB0aW9uPC9zcGFuPjwvZHQ+CgkJPGRkPkFk ZCBhIGNhcHRpb24gdG8gdGhlIGNhbGVuZGFyPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0 bm0iPnN1bW1hcnk8L3NwYW4+PC9kdD4KCQk8ZGQ+QWRkIGEgc3VtbWFyeSB0byB0aGUgY2Fs ZW5kYXI8L2RkPgoJPC9kbD4KCgk8aDMgY2xhc3M9ImF0dHMiPkZpbHRlciBhdHRyaWJ1dGVz PC9oMz4KCgk8ZGw+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj50aW1lPC9zcGFuPjwvZHQ+ CgkJPGRkPldoaWNoIGV2ZW50cyB0byBkaXNwbGF5LiBPcHRpb25zOgoJPGRsPgoJCTxkZD5h bnk8L2RkPgoJCTxkZD5wYXN0PC9kZD4KCQk8ZGQ+ZnV0dXJlPC9kZD4KCQk8ZGQ+dG9kYXk8 L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5EZWZhdWx0OiBhbnk8L2RkPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+ZXhwaXJlZDwvc3Bhbj48L2R0PgoJCTxkZD5IaWRlIG9yIHNob3cgZXhw aXJlZCBldmVudHMuIE9wdGlvbnM6Cgk8ZGw+CgkJPGRkPnVuc2V0ICh1c2UgdGhlIDxzcGFu IGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IFByZWZlcmVuY2UgJiM4MjE2O1B1Ymxpc2ggZXhw aXJlZCBhcnRpY2xlcyYjODIxNzspPC9kZD4KCQk8ZGQ+MCAoaGlkZSk8L2RkPgoJCTxkZD4x IChzaG93KTwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zdGF0 dXM8L3NwYW4+PC9kdD4KCQk8ZGQ+RXZlbnRzIGluIHRoaXMgc3RhdHVzIGxpc3QgYXJlIHB1 Ymxpc2hlZCBvbiB0aGUgY2FsZW5kYXIuIE9wdGlvbnM6Cgk8ZGw+CgkJPGRkPmxpdmU8L2Rk PgoJCTxkZD5zdGlja3k8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5EZWZhdWx0OiBsaXZlPC9k ZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmNhdGVnb3J5PC9zcGFuPjwvZHQ+CgkJPGRk PkZpbHRlciBldmVudHMgYnkgdGhpcyBsaXN0IG9mIGNhdGVnb3JpZXM8L2RkPgoJCTxkdD48 c3BhbiBjbGFzcz0iYXRubSI+c3ViY2F0czwvc3Bhbj48L2R0PgoJCTxkZD5Db25zaWRlciBz dWItY2F0ZWdvcmllcy4gQ2hvb3NlIGEgbnVtZXJpYyBuZXN0aW5nIGxldmVsIHRvIGNvbnNp ZGVyLCBvciB0aGUgd29yZCA8Y29kZT5hbGw8L2NvZGU+PC9kZD4KCQk8ZHQ+PHNwYW4gY2xh c3M9ImF0bm0iPnNlY3Rpb248L3NwYW4+PC9kdD4KCQk8ZGQ+RmlsdGVyIGV2ZW50cyBieSB0 aGlzIGxpc3Qgb2Ygc2VjdGlvbnM8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+YXV0 aG9yPC9zcGFuPjwvZHQ+CgkJPGRkPkZpbHRlciBldmVudHMgYnkgdGhpcyBsaXN0IG9mIGF1 dGhvciBsb2dpbiBuYW1lczwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5yZWFsbmFt ZTwvc3Bhbj48L2R0PgoJCTxkZD5GaWx0ZXIgZXZlbnRzIGJ5IHRoaXMgbGlzdCBvZiBhdXRo b3IgUmVhbCBOYW1lcyAobm90ZTogbWF5IGFkZCBvbmUgZXh0cmEgcXVlcnkpPC9kZD4KCQk8 ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnNob3dhbGw8L3NwYW4+PC9kdD4KCQk8ZGQ+SWYgeW91 ciBjYWxlbmRhciBhcHBlYXJzIG9uIHRoZSBmcm9udCBwYWdlIG9mIHlvdXIgc2l0ZSBhbmQg eW91IGhhdmUgPGVtPm5vdDwvZW0+IHVzZWQgdGhlIDxjb2RlPnNlY3Rpb248L2NvZGU+IGF0 dHJpYnV0ZSwgdGhlbjoKCTxkbD4KCQk8ZGQ+MDogb25seSBzaG93cyBldmVudHMgZnJvbSBz ZWN0aW9ucyBtYXJrZWQgd2l0aCA8Y29kZT5PbiBmcm9udCBwYWdlPC9jb2RlPjwvZGQ+CgkJ PGRkPjE6IHNob3dzIGFsbCBldmVudHMgZnJvbSBhbGwgc2VjdGlvbnM8L2RkPgoJPC9kbD48 L2RkPgoJCTxkZD5EZWZhdWx0OiAwPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm1v bnRoPC9zcGFuPjwvZHQ+CgkJPGRkPlN0YXJ0IHRoZSBjYWxlbmRhciBvbiB0aGlzIG1vbnRo IGZyb20gMSAoSmFuKSB0byAxMiAoRGVjKS4gTm9ybWFsIGNhbGVuZGFyIG5hdmlnYXRpb24g b3ZlcnJpZGVzIHRoaXMgdmFsdWU8L2RkPgoJCTxkZD5JZiA8Y29kZT5zdGF0aWM8L2NvZGU+ IGlzIHVzZWQsIHRoaXMgbW9udGggYmVjb21lcyB0aGUgb25seSBvbmUgeW91IG1heSB2aWV3 PC9kZD4KCQk8ZGQ+SWYgdW5zZXQsIGFuZCBubyA8Y29kZT5tPTwvY29kZT4gdmFsdWUgYXBw ZWFycyBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGluZSwgdGhlIGN1 cnJlbnQgbW9udGggaXMgdXNlZDwvZGQ+CgkJPGRkPjxzcGFuIGNsYXNzPSJhdG5tIj53ZWVr PC9zcGFuPjwvZGQ+CgkJPGRkPlN0YXJ0IHRoZSBjYWxlbmRhciBkdXJpbmcgdGhlIG1vbnRo IGNvbnRhaW5pbmcgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIChm cm9tIDEgdG8gNTMpPC9kZD4KCQk8ZGQ+SWdub3JlZCBpZiA8Y29kZT5zdGF0aWM8L2NvZGU+ IG9yIG9uZSBvZiB0aGUgY2FsZW5kYXIgbmF2aWdhdGlvbiBjb250cm9scyBpcyB1c2VkPC9k ZD4KCQk8ZGQ+SWYgYSA8Y29kZT53PTwvY29kZT4gdmFsdWUgYXBwZWFycyBvbiB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGluZSwgdGhlIGdpdmVuIHdlZWsgb3ZlcnJp ZGVzIGFueSBtb250aCB2YWx1ZTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj55ZWFy PC9zcGFuPjwvZHQ+CgkJPGRkPlN0YXJ0IHRoZSBjYWxlbmRhciBhdCB0aGlzIDQtZGlnaXQg eWVhci4gTm9ybWFsIGNhbGVuZGFyIG5hdmlnYXRpb24gb3ZlcnJpZGVzIHRoaXMgdmFsdWU8 L2RkPgoJCTxkZD5JZiA8Y29kZT5zdGF0aWM8L2NvZGU+IGlzIHVzZWQsIHRoaXMgeWVhciBi ZWNvbWVzIHRoZSBvbmx5IG9uZSB5b3UgbWF5IHZpZXc8L2RkPgoJCTxkZD5JZiB1bnNldCwg YW5kIG5vIDxjb2RlPnk9PC9jb2RlPiB2YWx1ZSBhcHBlYXJzIG9uIHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5lLCB0aGUgY3VycmVudCB5ZWFyIGlzIHVzZWQ8L2Rk PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+c3RhdGljPC9zcGFuPjwvZHQ+CgkJPGRkPkZv cmNlIHRoZSBjYWxlbmRhciB0byBiZSBmaXhlZCB0byBvbmUgbW9udGgveWVhciAoaS5lLiBu byBuYXZpZ2F0aW9uKS4gTW9udGggYW5kIHllYXIgZGVjaWRlZCBieSBhdHRyaWJ1dGVzIDxj b2RlPm1vbnRoPC9jb2RlPiBhbmQgPGNvZGU+eWVhcjwvY29kZT4gb3IsIGlmIG9taXR0ZWQs IHRoZSBjdXJyZW50IGRhdGUgd2lsbCBiZSB1c2VkPC9kZD4KCTwvZGw+CgoJPGgzIGNsYXNz PSJhdHRzIj5Gb3JtIGF0dHJpYnV0ZXM8L2gzPgoKCTxkbD4KCQk8ZHQ+PHNwYW4gY2xhc3M9 ImF0bm0iPmZvcm08L3NwYW4+PC9kdD4KCQk8ZGQ+VXNlIHRoZSBnaXZlbiA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBmb3JtIHRvIHByb2Nlc3MgZWFjaCBldmVudDwvZGQ+CgkJ PGRkPklmIHRoZSBzbWRfY2FsZW5kYXIgdGFnIGlzIHVzZWQgYXMgYSBjb250YWluZXIgaXQg d2lsbCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhlIGZvcm08L2RkPgoJCTxkZD5JZiBu ZWl0aGVyIGFyZSB1c2VkLCBhIGRlZmF1bHQgaXMgdXNlZCAoTGFyZ2U6IGh5cGVybGlua2Vk IGFydGljbGUgdGl0bGUsIFNtYWxsOiBlbXB0eSBldmVudCk8L2RkPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+c3BhbmZvcm08L3NwYW4+PC9kdD4KCQk8ZGQ+RGlzcGxheSBzcGFubmVk IGV2ZW50cyBkaWZmZXJlbnRseSB0byBzdGFuZGFyZCBldmVudHM7IHRoZXkgdXN1YWxseSB1 c2UgdGhlIHNhbWUgPGNvZGU+Zm9ybTwvY29kZT4vY29udGFpbmVyPC9kZD4KCQk8ZGQ+SWYg bmVpdGhlciBhcmUgc3BlY2lmaWVkLCBhIHJpZ2h0LWFycm93IHdpbGwgYmUgdXNlZCB0byBp bmRpY2F0ZSBjb250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGRheSYjODIxNztzIGV2ZW50 PC9kZD4KCQk8ZGQ+Tm90ZTogdGhlIGZpcnN0IGRheSBvZiBhIHNwYW5uZWQgc2V0IGlzIDxl bT5ub3Q8L2VtPiBwYXNzZWQgdG8gdGhlIDxjb2RlPnNwYW5mb3JtPC9jb2RlPjsgb25seSBj b250aW51YXRpb24gY2VsbHMgYXJlIHBhc3NlZCB0byBpdDwvZGQ+CgkJPGR0PjxzcGFuIGNs YXNzPSJhdG5tIj5yZWN1cmZvcm08L3NwYW4+PC9kdD4KCQk8ZGQ+RGlzcGxheSByZWN1cnJp bmcgZXZlbnRzIGRpZmZlcmVudGx5IHRvIHN0YW5kYXJkIGV2ZW50czwvZGQ+CgkJPGRkPk5v dGU6IHRoZSBmaXJzdCBldmVudCBvZiBhIHJlY3VycmluZyBzZXQgaXMgPGVtPm5vdDwvZW0+ IHBhc3NlZCB0byA8Y29kZT5yZWN1cmZvcm08L2NvZGU+PC9kZD4KCQk8ZHQ+PHNwYW4gY2xh c3M9ImF0bm0iPmNlbGxmb3JtPC9zcGFuPiAoPHNwYW4gY2xhc3M9ImltcG9ydGFudCI+b25s eSBvbiBsYXJnZSBjYWxlbmRhcnM8L3NwYW4+KTwvZHQ+CgkJPGRkPlVzZSBpZiB5b3Ugd2lz aCB0byBidWlsZCBlYWNoIGNlbGwgZW50aXJlbHkgZnJvbSBzY3JhdGNoPC9kZD4KCQk8ZGQ+ VGhlcmUgYXJlIHNvbWUgPGEgaHJlZj0iI2NlbGxmb3JtIj5yZXBsYWNlbWVudCB2YXJpYWJs ZXM8L2E+IHlvdSBjYW4gdXNlIHRvIGluc2VydCBkeW5hbWljIHBpZWNlcyBvZiBpbmZvcm1h dGlvbiBpbiB5b3VyIGNlbGxzPC9kZD4KCQk8ZGQ+Tm90ZTogeW91IGNhbm5vdCB1c2UgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gYXJ0aWNsZSBvciBwbHVnaW4gdGFncyBpbiB0 aGUgRm9ybTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5oZWFkZXJmb3JtPC9zcGFu PjwvZHQ+CgkJPGRkPlVzZSBpZiB5b3Ugd2lzaCB0byBidWlsZCB0aGUgaGVhZGVyIHlvdXJz ZWxmPC9kZD4KCQk8ZGQ+VGhlcmUgYXJlIHNvbWUgPGEgaHJlZj0iI2hkcmZvcm0iPnJlcGxh Y2VtZW50IHZhcmlhYmxlczwvYT4geW91IGNhbiB1c2UgdG8gaW5zZXJ0IGR5bmFtaWMgcGll Y2VzIG9mIGluZm9ybWF0aW9uIGluIHlvdXIgaGVhZGVyPC9kZD4KCTwvZGw+CgoJPGgzIGNs YXNzPSJhdHRzIiBpZD0iZmxkYXR0cyI+RmllbGQtYmFzZWQgYXR0cmlidXRlcyAoY3VzdG9t IGZpZWxkcyBvciBvdGhlciBhcnRpY2xlIGZpZWxkcyk8L2gzPgoKCTxkbD4KCQk8ZHQ+PHNw YW4gY2xhc3M9ImF0bm0iPnN0ZXBmaWVsZDwvc3Bhbj48L2R0PgoJCTxkZD5JRCBvZiBhIGZp ZWxkIHdpdGhpbiB3aGljaCBhbiBldmVudCBtYXkgYmUgdG9sZCB0byByZXBlYXQ8L2RkPgoJ CTxkZD5Ob3RlOiBpdCBpcyB0aGUgZmllbGQmIzgyMTc7cyBJRCA8ZW0+bm90IGl0cyBuYW1l PC9lbT4sIHNvIGZvciBjdXN0b20gZmllbGRzIHlvdSBtdXN0IHVzZSA8Y29kZT5jdXN0b21f MTwvY29kZT4gb3IgPGNvZGU+Y3VzdG9tXzI8L2NvZGU+IGV0YzwvZGQ+CgkJPGRkPldpdGhv dXQgdGhpcyBhdHRyaWJ1dGUsIG5vIDxhIGhyZWY9IiNyZWN1ciI+cmVjdXJyaW5nIGV2ZW50 czwvYT4gbWF5IGJlIGRlZmluZWQ8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+b21p dGZpZWxkPC9zcGFuPjwvZHQ+CgkJPGRkPklEIChub3QgbmFtZSkgb2YgYSBmaWVsZCB0aGF0 IGNvbnRhaW5zIGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGlzIGV2ZW50IGlzIHRvIGJl IDxhIGhyZWY9IiNjYW5jZWwiPm9taXR0ZWQ8L2E+PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9 ImF0bm0iPnNraXBmaWVsZDwvc3Bhbj48L2R0PgoJCTxkZD5JRCAobm90IG5hbWUpIG9mIGEg ZmllbGQgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgZGF0ZXMgb24gd2hpY2ggdGhpcyBldmVu dCBpcyA8YSBocmVmPSIjY2FuY2VsIj5jYW5jZWxsZWQ8L2E+PC9kZD4KCQk8ZHQ+PHNwYW4g Y2xhc3M9ImF0bm0iPmV4dHJhZmllbGQ8L3NwYW4+OjwvZHQ+CgkJPGRkPklEIChub3QgbmFt ZSkgb2YgYSBmaWVsZCBmcm9tIHdoaWNoIGEgbGlzdCBvZiA8YSBocmVmPSIjZXh0cmEiPmFk ZGl0aW9uYWwgZXZlbnQgZGF0ZXM8L2E+IG1heSBiZSBnaXZlbjsgdGhlIHNhbWUgZXZlbnQg ZGV0YWlscyB3aWxsIGJlIGNvcGllZCB0byB0aGUgbmV3IGRheShzKTwvZGQ+CgkJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj5leHRyYXN0cmljdDwvc3Bhbj48L2R0PgoJCTxkZD5Db250cm9s IHZpc2liaWxpdHkgb2YgZXh0cmEgZGF0ZXMgb24gdGhlIGNhbGVuZGFyLiBPcHRpb25zOgoJ PGRsPgoJCTxkZD4wOiA8Y29kZT5leHRyYWZpZWxkPC9jb2RlPiBkYXRlcyBhdXRvbWF0aWNh bGx5IGFwcGVhciBvbiB0aGUgY2FsZW5kYXI8L2RkPgoJCTxkZD4xOiByZXN0cmljdCBuZXcg ZGF0ZXMgZnJvbSBhcHBlYXJpbmcgYWZ0ZXIgdGhlIGV2ZW50JiM4MjE3O3MgZXhwaXJ5IGRh dGU8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5EZWZhdWx0OiAwPC9kZD4KCQk8ZHQ+PHNwYW4g Y2xhc3M9ImF0bm0iPnNob3dza2lwcGVkPC9zcGFuPjwvZHQ+CgkJPGRkPkNvbnRyb2wgdmlz aWJpbGl0eSBvZiBjYW5jZWxsZWQgZXZlbnRzIG9uIHRoZSBjYWxlbmRhci4gT3B0aW9uczoK CTxkbD4KCQk8ZGQ+MCAoaGlkZSk8L2RkPgoJCTxkZD4xIChzaG93KTwvZGQ+Cgk8L2RsPjwv ZGQ+CgkJPGRkPkRlZmF1bHQ6IDA8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+c2hv d3NwYW5uZWQ8L3NwYW4+PC9kdD4KCQk8ZGQ+Q29udHJvbCB2aXNpYmlsaXR5IG9mIHNwYW5u ZWQgZXZlbnRzIG9uIHRoZSBjYWxlbmRhci4gT3B0aW9uczoKCTxkbD4KCQk8ZGQ+MCAoaGlk ZSk8L2RkPgoJCTxkZD4xIChzaG93KTwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6 IDE8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZGF0ZWZpZWxkczwvc3Bhbj48L2R0 PgoJCTxkZD5JRHMgKG5vdCBuYW1lcykgb2YgdXAgdG8gdHdvIGZpZWxkcyBmcm9tIHdoaWNo IHBvc3RlZCBhbmQgZXhwaXJ5IGRhdGUgc3RhbXBzIG1heSBiZSByZWFkLiBDb21tYS1zZXBh cmF0ZSB0aGUgZmllbGQgbmFtZXM7IHRoZSBmaXJzdCB3aWxsIGJlIHVzZWQgYXMgdGhlIFBv c3RlZCBkYXRlIGFuZCB0aGUgc2Vjb25kIGFzIHRoZSBFeHBpcnk8L2RkPgoJCTxkZD5JZiBl aXRoZXIgaXMgb21pdHRlZCBvciBtYW5nbGVkLCB0aGUgYXJ0aWNsZSYjODIxNztzICYjODIy MDtyZWFsJiM4MjIxOyBwb3N0ZWQvZXhwaXJ5IGRhdGUgd2lsbCBiZSB1c2VkIGluc3RlYWQ8 L2RkPgoJCTxkZD5JZiB0aGUgZXhwaXJ5IGRhdGUgb2NjdXJzIGJlZm9yZSB0aGUgc3RhcnQg ZGF0ZSwgeW91ciBkYXRlZmllbGRzIHdpbGwgYmUgaWdub3JlZCBhbmQgYSB3YXJuaW5nIHdp bGwgYmUgaXNzdWVkPC9kZD4KCTwvZGw+CgoJPGgzIGNsYXNzPSJhdHRzIj5Db25maWcgYXR0 cmlidXRlczwvaDM+CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+aG9saWRheXM8 L3NwYW4+PC9kdD4KCQk8ZGQ+TGlzdCBvZiBkYXRlcyB0aGF0IGFyZSBkZWNyZWVkIGFzIDxh IGhyZWY9IiNob2xpZGF5cyI+aG9saWRheXM8L2E+PC9kZD4KCQk8ZGQ+TWF5IGJlIGRlZmVy cmVkIHRvIGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29kZT4sIGluIHdoaWNo IGNhc2UgZGVmaW5lIHlvdXIgbGlzdCBpbiBhIG5hbWVkIHZhcmlhYmxlIGFuZCB1c2UgPGNv ZGU+aG9saWRheXM9JnF1b3Q7dHhwdmFyOm15X3Zhcl9uYW1lJnF1b3Q7PC9jb2RlPiB0byBy ZWFkIHRoZW0gaW50byB0aGUgcGx1Z2luPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0i PmhvbGlkYXlmbGFnczwvc3Bhbj48L2R0PgoJCTxkZD5QZXJtaXQgY2VydGFpbiBldmVudCBm bGFncyB0byBiZSBzY2hlZHVsZWQgb24gaG9saWRheXMuIExpc3Qgb25lIG9yIG1vcmUgb2Y6 Cgk8ZGw+CgkJPGRkPnN0YW5kYXJkPC9kZD4KCQk8ZGQ+cmVjdXI8L2RkPgoJCTxkZD5tdWx0 aTwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDxjb2RlPnN0YW5kYXJkPC9jb2Rl PjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj48L2R0PgoJCTxkZD48 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gSUQgdG8gYXBwbHkgdG8gdGhlIHRhYmxl IHRoYXQgaG9sZHMgdGhlIGNhbGVuZGFyLiBUaGlzIGJlY29tZXMgdGhlIHZhbHVlIG9mIHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB2YXJpYWJsZSA8Y29kZT5jYWxpZDwv Y29kZT48L2RkPgoJCTxkZD5Vc2UgdGhpcyBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGNh bGVuZGFyIG9uIGEgcGFnZSBhbmQgd2lzaCB0byBjb250cm9sIHRoZW0gc2VwYXJhdGVseSB2 aWEgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcnM8L2RkPgoJCTxkdD48 c3BhbiBjbGFzcz0iYXRubSI+bmF2aWQ8L3NwYW4+PC9kdD4KCQk8ZGQ+PHNwYW4gY2xhc3M9 ImNhcHMiPkhUTUw8L3NwYW4+IElEIHRvIGFwcGx5IHRvIHRoZSBwcmV2L25leHQvbW9udGgv eWVhciBuYXZpZ2F0aW9uIGZvcm08L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+eWVh cndpZHRoPC9zcGFuPjwvZHQ+CgkJPGRkPkEgY29tbWEtc2VwYXJhdGVkIGxpc3QgdGhhdCBz cGVjaWZpZXMgaG93IG1hbnkgeWVhcnMgeW91ciBjYWxlbmRhciBzcGFucy4gVmlzaXRvcnMg d2lsbCBub3QgYmUgcGVybWl0dGVkIHRvIG5hdmlnYXRlIChuZXh0L3ByZXYpIHRoZSBjYWxl bmRhciBvdXRzaWRlIHRoaXMgcmFuZ2UuIE9wdGlvbnM6Cgk8ZGw+CgkJPGRkPjA6IHVzZSB0 aGUgZWFybGllc3QgKHBvc3RlZCkgZXZlbnQgYXMgdGhlIGVhcmxpZXN0IHllYXIsIGFuZCB0 aGUgbGF0ZXN0IChtb2RpZmllZCBvciBwb3N0ZWQsIHdoaWNoZXZlciBpcyBncmVhdGVyKSBl dmVudCBhcyB0aGUgbGF0ZXN0IHllYXI8L2RkPgoJCTxkZD5hbnkgb3RoZXIgc2luZ2xlIG51 bWJlciBleHBhbmRzIHRoZSByYW5nZSBlcXVhbGx5IGluIHBhc3QgJmFtcDsgZnV0dXJlIGRp cmVjdGlvbnM8L2RkPgoJCTxkZD5hbnkgcGFpciBvZiBudW1iZXJzIHN1YnRyYWN0cyB0aGUg Zmlyc3QgZnJvbSB0aGUgZWFybGllc3QgZXZlbnQgYW5kIGFkZHMgdGhlIHNlY29uZCBudW1i ZXIgb2Ygd2hvbGUgeWVhcnMgdG8gdGhlIGxhdGVzdCBldmVudDwvZGQ+CgkJPGRkPmFkZGlu ZyA8Y29kZT5jPC9jb2RlPiB0byBlaXRoZXIgdmFsdWUgY2F1c2VzIHRoZSBjdXJyZW50IHll YXIgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBlYXJsaWVzdCBvciBsYXRlc3QgZXZlbnQ8 L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5FeGFtcGxlOiA8Y29kZT55ZWFyd2lkdGg9JnF1b3Q7 Miw0YyZxdW90OzwvY29kZT4gc3VidHJhY3RzIDIgeWVhcnMgZnJvbSB0aGUgZWFybGllc3Qg ZXZlbnQgYW5kIGFkZHMgNCB3aG9sZSB5ZWFycyB0byB0b2RheSYjODIxNztzIGRhdGU8L2Rk PgoJCTxkZD5EZWZhdWx0OiAwPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnJlbWFw PC9zcGFuPjwvZHQ+CgkJPGRkPldoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIGNhbGVuZGFy cyBvbiBhIHBhZ2UgaXQgaXMgb2Z0ZW4gYmVuZWZpY2lhbCB0byB1c2UgZGlmZmVyZW50IG5h bWVzIGZvciA8Y29kZT53PTwvY29kZT4sIDxjb2RlPm09PC9jb2RlPiBvciA8Y29kZT55PTwv Y29kZT4gaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHNvIHlvdSBjYW4g bmF2aWdhdGUgY2FsZW5kYXJzIGluZGl2aWR1YWxseS4gVGhpcyBhdHRyaWJ1dGUgZW5hYmxl cyB5b3UgdG8gcmVuYW1lIHRoZSB3LCBtLCAmYW1wOyB5IHZhcmlhYmxlIHRvIGFueSBuYW1l IHNwZWNpZmllZCBhZnRlciBhIGNvbG9uICg6KTwvZGQ+CgkJPGRkPkV4YW1wbGU6IDxjb2Rl PnJlbWFwPSZxdW90O3c6d2ssIHk6eXImcXVvdDs8L2NvZGU+PC9kZD4KCQk8ZHQ+PHNwYW4g Y2xhc3M9ImF0bm0iPmxpbmtwb3N0ZWQ8L3NwYW4+ICg8c3BhbiBjbGFzcz0iaW1wb3J0YW50 Ij5vbmx5IG9uIHNtYWxsIGNhbGVuZGFyczwvc3Bhbj4pPC9kdD4KCQk8ZGQ+RWFjaCBjZWxs IHRoYXQgY29udGFpbnMgYW4gZXZlbnQgZmxhZyBvZiB0aGUgZ2l2ZW4gdHlwZShzKSB3aWxs IGhhdmUgaXRzIGRheSBudW1iZXIgbGlua2VkIHRvIHRoZSBldmVudCYjODIxNztzIHRydWUg c3RhcnQgZGF0ZSBpbnN0ZWFkIG9mIHRoZSBjZWxsJiM4MjE3O3MgZGF0ZS4gVGhpcyBhbGxv d3MgeW91IHRvIGFsd2F5cyBsaW5rIHRvIGEgdmFsaWQgYXJ0aWNsZS9ldmVudDwvZGQ+CgkJ PGRkPk5vdGUgdGhhdCBpZiBtb3JlIHRoYW4gb25lIGV2ZW50IG9jY3VycyBpbiB0aGUgY2Vs bCwgdGhlIGxpbmsgd2lsbCBvbmx5IGJlIHRvIHRoZSBmaXJzdCBldmVudCB0aGUgcGx1Z2lu IGZpbmRzPC9kZD4KCQk8ZGQ+RXhhbXBsZTogaWYgeW91IGhhdmUgYSB3ZWVrbHkgZXZlbnQg dGhhdCBzdGFydHMgb24gdGhlIDIwdGggRGVjZW1iZXIgMjAwOCwgc2V0dGluZyA8Y29kZT5s aW5rcG9zdGVkPSZxdW90O3JlY3VyJnF1b3Q7PC9jb2RlPiB3aWxsIGNhdXNlIHRoZSBsaW5r IHRvIGJlIDxjb2RlPmRhdGU9MjAwOC0xMi0yMDwvY29kZT4gZXZlcnkgd2Vlay4gV2l0aG91 dCBsaW5rcG9zdGVkLCB0aGUgZGF0ZXMgd291bGQgYmUgMjAwOC0xMi0yMCwgMjAwOC0xMi0y NywgMjAwOS0wMS0wMywgYW5kIHNvIG9uPC9kZD4KCQk8ZGQ+RGVmYXVsdDogPGNvZGU+cmVj dXIsIG11bHRpLCBtdWx0aXByZXYsIG11bHRpbGFzdDwvY29kZT4gKGkuZS4gYW55IHJlY3Vy cmluZyBvciBzcGFubmVkIGV2ZW50KTwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5t YWludGFpbjwvc3Bhbj48L2R0PgoJCTxkZD5LZWVwIHRyYWNrIG9mIHRoaXMgY29tbWEtc2Vw YXJhdGVkIGxpc3Qgb2YgdmFyaWFibGVzIGluIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPiB3aGVuIG5hdmlnYXRpbmcgdGhlIGNhbGVuZGFyIHVzaW5nIHRoZSBuZXh0L3By ZXYgb3IgbW9udGgveWVhciBzZWxlY3QgbGlzdHMuIElmIHlvdSB3aXNoIHRvIG1haW50YWlu IHN0YXRlIHlvdXJzZWxmIG9yIGRvIHNvbWV0aGluZyBleG90aWMsIGVtcHR5IHRoaXMgYXR0 cmlidXRlIGZpcnN0IHRvIGF2b2lkIHdlaXJkbmVzcy4gT3B0aW9uczoKCTxkbD4KCQk8ZGQ+ Y2FsaWQ8L2RkPgoJCTxkZD5zZWN0aW9uPC9kZD4KCQk8ZGQ+Y2F0ZWdvcnk8L2RkPgoJCTxk ZD5hdXRob3I8L2RkPgoJCTxkZD5hcnRpY2xlPC9kZD4KCQk8ZGQ+ZGF0ZTwvZGQ+CgkJPGRk PnBnPC9kZD4KCQk8ZGQ+YW55IG90aGVyIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ IHZhcmlhYmxlIG9mIHlvdXIgY2hvb3Npbmc8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5FeGFt cGxlOiB1c2UgPGNvZGU+bWFpbnRhaW49JnF1b3Q7c2VjdGlvbiwgYXJ0aWNsZSwgY2FsaWQm cXVvdDs8L2NvZGU+IGlmIHlvdSBoYXZlIGFuIGluZGl2aWR1YWwgYXJ0aWNsZSBwYWdlIHdp dGggYSBjYWxlbmRhciBpbiBhIHNpZGViYXIsIHNvIHRoZSBjdXJyZW50bHkgdmlld2VkIGFy dGljbGUgd2lsbCByZW1haW4gaW4gdmlldyB3aGVuIGNoYW5naW5nIGRhdGU8L2RkPgoJCTxk ZD5EZWZhdWx0OiBjYWxpZDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5uYW1ldmFs PC9zcGFuPjwvZHQ+CgkJPGRkPkFkZCB5b3VyIG93biBuYW1lL3ZhbHVlIHBhaXJzIHRvIHRo ZSBjYWxlbmRhciYjODIxNztzIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LjwvZGQ+ CgkJPGRkPkV4YW1wbGU6IDxjb2RlPm5hbWV2YWw9JnF1b3Q7dHJhY2tlcj1teWNhbCwga2Vl cD0xJnF1b3Q7PC9jb2RlPiB3b3VsZCBhZGQgPGNvZGU+P3RyYWNrZXI9bXljYWwmYW1wO2tl ZXA9MTwvY29kZT4gdG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+LiBVc2Vm dWwgaWYgeW91IHdhbnQgdG8gPGNvZGU+bWFpbnRhaW48L2NvZGU+IHNvbWUgdmFsdWVzIHdo aWNoIHlvdSBjYW4mIzgyMTc7dCBhZGQgdG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IG9uIHBhZ2UgbG9hZDwvZGQ+Cgk8L2RsPgoKCTxoMyBjbGFzcz0iYXR0cyI+U3R5 bGUgYXR0cmlidXRlczwvaDM+CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+Y2xh c3NsZXZlbHM8L3NwYW4+PC9kdD4KCQk8ZGQ+RWFjaCBmbGFnZ2VkIGV2ZW50IGNhbiBiZSBn aXZlbiBhIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIGJhc2VkIG9uIGl0 cyBmbGFnIG5hbWUocykuIENsYXNzZXMgY2FuIGJlIGFwcGxpZWQgdG8gZXZlbnRzLCBjZWxs cywgb3IgYm90aC4gWW91IG1heSBhbHNvIHByb21vdGUgKGkuZS4gY29weSkgYWxsIGV2ZW50 IGNsYXNzZXMgdGhhdCBvY2N1ciBpbiBhIGRheSB0byB0aGUgY2VsbCBpdHNlbGYgc28geW91 IGNhbiBzdHlsZSB0aGUgY2VsbCBiYXNlZCBvbiB0aGUgZXZlbnRzIGl0IGNvbnRhaW5zLiBP cHRpb25zOgoJPGRsPgoJCTxkZD5ldmVudDwvZGQ+CgkJPGRkPmNlbGw8L2RkPgoJCTxkZD5j ZWxscGx1cyAoZm9yIGNvcHlpbmcgdW5pcXVlIGV2ZW50IGNsYXNzZXMgdG8gdGhlIGNvbnRh aW5pbmcgY2VsbCk8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5Ob3RlIHlvdSBzaG91bGQgbm90 IHVzZSA8Y29kZT5jZWxsPC9jb2RlPiBhbmQgPGNvZGU+Y2VsbHBsdXM8L2NvZGU+IHRvZ2V0 aGVyIGJlY2F1c2UgdGhlIGxhdHRlciBvdmVycmlkZXMgdGhlIGZvcm1lcjwvZGQ+CgkJPGRk PkRlZmF1bHQ6IGNlbGwsIGV2ZW50PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmNs YXNzcHJlZml4ZXM8L3NwYW4+PC9kdD4KCQk8ZGQ+Q29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Yg dXAgdG8gdHdvIHByZWZpeGVzIHRvIGFwcGx5IHRvIHlvdXIgY2xhc3MgbmFtZXMuIFRoZSBm aXJzdCBwcmVmaXggaXMgYXBwbGllZCB0byBjZWxsLWxldmVsIGNsYXNzZXMgKGFuZCBmbGFn cykgYW5kIHRoZSBzZWNvbmQgcHJlZml4IGlzIGFwcGxpZWQgdG8gZXZlbnQgY2xhc3NlcyAo c2VlIDxjb2RlPmV2ZW50Y2xhc3NlczwvY29kZT4pPC9kZD4KCQk8ZGQ+SWYgeW91IG9ubHkg c3BlY2lmeSBvbmUgcHJlZml4LCBpdCB3aWxsIGJlIHVzZWQgZm9yIGJvdGguIElmIHlvdSB1 c2UgPGNvZGU+Y2xhc3NwcmVmaXhlcz0mcXVvdDsmcXVvdDs8L2NvZGU+IHRoZW4gbm8gcHJl Zml4ZXMgd2lsbCBiZSB1c2VkIGF0IGFsbDwvZGQ+CgkJPGRkPkRlZmF1bHQ6IHNtZF9jYWxf LCBzbWRfY2FsX2V2XzwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bh bj48L2R0PgoJCTxkZD5DbGFzcyBuYW1lIG9mIHRoZSBjYWxlbmRhciB0YWJsZSBpdHNlbGY8 L2RkPgoJCTxkZD5EZWZhdWx0OiB1bnNldDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5t Ij5yb3djbGFzczwvc3Bhbj48L2R0PgoJCTxkZD5DbGFzcyBuYW1lIG9mIGVhY2ggdGFibGUg cm93PC9kZD4KCQk8ZGQ+RGVmYXVsdDogdW5zZXQ8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+Y2VsbGNsYXNzPC9zcGFuPjwvZHQ+CgkJPGRkPkNsYXNzIG5hbWUgb2YgZWFjaCB0 YWJsZSBjZWxsPC9kZD4KCQk8ZGQ+RGVmYXVsdDogdW5zZXQ8L2RkPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+ZW1wdHljbGFzczwvc3Bhbj48L2R0PgoJCTxkZD5DbGFzcyBuYW1lIG9m IGFueSBjZWxscyB0aGF0IGRvbiYjODIxNzt0IGNvbnRhaW4gYSBkYXkgbnVtYmVyIChpLmUu IHRoZSBibGFuayBjZWxscyBhdCB0aGUgc3RhcnQgJmFtcDsgZW5kIG9mIGEgbW9udGgpPC9k ZD4KCQk8ZGQ+RGVmYXVsdDogZW1wdHk8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ aXNvd2Vla2NsYXNzPC9zcGFuPjwvZHQ+CgkJPGRkPkNsYXNzIG5hbWUgb2YgZWFjaCBjZWxs IGNvbnRhaW5pbmcgYW4gPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlazwvZGQ+ CgkJPGRkPkRlZmF1bHQ6IHdlZWs8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+bmF2 Y2xhc3M8L3NwYW4+PC9kdD4KCQk8ZGQ+Q2xhc3MgbmFtZSBvZiB0aGUgcHJldi9uZXh0IG1v bnRoIG5hdiBhcnJvd3MuIElmIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgaXMgdXNlZCwgdGhl IGZpcnN0IGl0ZW0gd2lsbCBiZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3Mgb2YgdGhlIHByZXZp b3VzIG1vbnRoLCB0aGUgMm5kIGl0ZW0gb2YgdGhlIG5leHQgbW9udGguIElmIGEgc2luZ2xl IHZhbHVlIGlzIHVzZWQsIGJvdGggY2xhc3MgbmFtZXMgd2lsbCBiZSB0aGUgc2FtZTwvZGQ+ CgkJPGRkPkRlZmF1bHQ6IG5hdnByZXYsIG5hdm5leHQ8L2RkPgoJCTxkdD48c3BhbiBjbGFz cz0iYXRubSI+bXljbGFzczwvc3Bhbj48L2R0PgoJCTxkZD5DbGFzcyBuYW1lIG9mIGJvdGgg dGhlIG1vbnRoIGFuZCB5ZWFyIGluIHRoZSBjYWxlbmRhciBoZWFkZXIgKGVpdGhlciB0aGUg PGNvZGU+Jmx0O3NwYW4mZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7c2VsZWN0Jmd0OzwvY29k ZT4gdGFncykuIElmIDxjb2RlPm15d3JhcHRhZzwvY29kZT4gaXMgdXNlZCwgdGhlIGNsYXNz IGlzIGFwcGxpZWQgdG8gdGhlIHdyYXB0YWcgaW5zdGVhZDwvZGQ+CgkJPGRkPkRlZmF1bHQ6 IHVuc2V0PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmV2ZW50Y2xhc3Nlczwvc3Bh bj48L2R0PgoJCTxkZD5Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpdGVtcyB0byBhZGQgYXMg Y2xhc3NlcyB0byBlYWNoIGV2ZW50LiBFYWNoIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBldmVu dCBwcmVmaXg8L2RkPgoJCTxkZD5FeGFtcGxlOiA8Y29kZT5ldmVudGNsYXNzZXM9JnF1b3Q7 SUQsIEF1dGhvcklELCBjdXN0b21fNSZxdW90OzwvY29kZT4gd291bGQgYWRkIHRocmVlIGNs YXNzZXMgdG8gZWFjaCBldmVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBldmVudCYjODIxNztz IElELCBpdHMgYXV0aG9yIChsb2dpbikgbmFtZSBhbmQgdGhlIGNvbnRlbnRzIG9mIGN1c3Rv bV81PC9kZD4KCQk8ZGQ+SWYgeW91IHVzZSA8Y29kZT5jZWxscGx1czwvY29kZT4sIHRoZXNl IGNsYXNzZXMgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGNlbGwgbGV2ZWwuIFNvbWUgc3BlY2lh bCBuYW1lcyBleGlzdDogPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IGFkZHMgYm90aCBDYXRlZ29y eTEgYW5kIENhdGVnb3J5MiAoaWYgc2V0KTsgPGNvZGU+Z2NhdDwvY29kZT4gd2lsbCBhZGQg dGhlIGN1cnJlbnQgJiM4MjE2O2dsb2JhbCYjODIxNzsgY2F0ZWdvcnkgKGlmIGZpbHRlcmlu ZyBieSBjYXRlZ29yeSk7IDxjb2RlPmF1dGhvcjwvY29kZT4gYWRkcyB0aGUgYXV0aG9yIElE IChpZiBmaWx0ZXJpbmcgYnkgYXV0aG9yKTsgPGNvZGU+c2VjdGlvbjwvY29kZT4gYWRkcyB0 aGUgY3VycmVudCBzZWN0aW9uPC9kZD4KCQk8ZGQ+RGVmYXVsdDogY2F0ZWdvcnk8L2RkPgoJ CTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnR3cmFwdGFnPC9zcGFuPjwvZHQ+CgkJPGRk PihYKUhUTUwgdGFnLCB3aXRob3V0IGJyYWNrZXRzLCB0byB3cmFwIGVhY2ggZXZlbnQgd2l0 aDwvZGQ+CgkJPGRkPkRlZmF1bHQ6IHNwYW48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRu bSI+bXl3cmFwdGFnPC9zcGFuPjwvZHQ+CgkJPGRkPihYKUhUTUwgdGFnLCB3aXRob3V0IGJy YWNrZXRzLCB0byB3cmFwIGFyb3VuZCA8ZW0+Ym90aDwvZW0+IG1vbnRoICsgeWVhciBkcm9w ZG93biBzZWxlY3QgbGlzdHMgYW5kIHN1Ym1pdCBidXR0b248L2RkPgoJCTxkZD5EZWZhdWx0 OiB1bnNldDwvZGQ+Cgk8L2RsPgoKCTxoMyBpZD0iY2VsbGZvcm0iPlVzaW5nIGEgPGNvZGU+ Y2VsbGZvcm08L2NvZGU+IHdpdGggcmVwbGFjZW1lbnQgdmFyaWFibGVzPC9oMz4KCgk8cD5J ZiB5b3UgZG9uJiM4MjE3O3QgbGlrZSB0aGUgbGF5b3V0IG9mIHRoZSBkZWZhdWx0IGNlbGws IHlvdSBjYW4gZG8gaXQgeW91cnNlbGYgd2l0aCB0aGUgPGNvZGU+Y2VsbGZvcm08L2NvZGU+ IGF0dHJpYnV0ZS4gVGhlIGNlbGxzIGFyZSBnZW5lcmF0ZWQgPGVtPmxhc3Q8L2VtPiwgc28g YnkgdGhlIHRpbWUgdGhlIHBsdWdpbiByZWFjaGVzIHRoaXMgYXR0cmlidXRlLCBhbGwgZXZl bnRzIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBieSBhbnkgb2YgeW91ciBmb3Jtcy9j b250YWluZXJzLiBUaHVzIHlvdSBjYW4mIzgyMTc7dCB1c2UgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gYXJ0aWNsZSBvciBwbHVnaW4gdGFncy48L3A+CgoJPHA+VG8gYnVpbGQg eW91ciBvd24gY2VsbHMgeW91IG9mdGVuIG5lZWQgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUg ZXZlbnRzIHRoYXQgZmFsbCBvbiBhIHBhcnRpY3VsYXIgZGF5OyBvciB0aGUgd2VlaywgbW9u dGggb3IgZGF5IG51bWJlcnMsIGV0Yy4gU28geW91IG1heSBhbHNvIGluc2VydCBhbnkgb2Yg dGhlIGZvbGxvd2luZyByZXBsYWNlbWVudHMgdG8gaGF2ZSB0aGUgcmVsZXZhbnQgdmFsdWUg aW5zZXJ0ZWQgYW1vbmcgeW91ciBtYXJrdXA6PC9wPgoKCTx1bD4KCQk8bGk+e2RheX0gLyB7 ZGF5emVyb3N9IDogZGF5IG9mIHRoZSB3ZWVrICgxLTMxIC8gMDEtMzEpPC9saT4KCQk8bGk+ e3dlZWtkYXl9IDogd2Vla2RheSBpbiB0aGUgbG9jYWwgbGFuZ3VhZ2UsIG9yIGZyb20geW91 ciA8Y29kZT5kYXlmb3JtYXQ8L2NvZGU+IGxpc3Q8L2xpPgoJCTxsaT57d2Vla2RheWZ1bGx9 IG9yIHt3ZWVrZGF5YWJicn0gOiB3ZWVrZGF5IGluIHRoZSBsb2NhbCBsYW5ndWFnZTwvbGk+ CgkJPGxpPnt3ZWVrfSA6IDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgbnVt YmVyICgwMS01Myk8L2xpPgoJCTxsaT57bW9udGh9IC8ge21vbnRoemVyb3N9IDogbW9udGgg bnVtYmVyICgxLTEyIC8gMDEtMTIpPC9saT4KCQk8bGk+e21vbnRobmFtZX0gOiBtb250aCBu YW1lIGluIHRoZSBsb2NhbCBsYW5ndWFnZSwgb3IgZnJvbSB5b3VyIDxjb2RlPm1vbnRoZm9y bWF0PC9jb2RlPiBsaXN0PC9saT4KCQk8bGk+e21vbnRobmFtZWZ1bGx9IG9yIHttb250aG5h bWVhYmJyfSA6IG1vbnRoIG5hbWUgaW4gdGhlIGxvY2FsIGxhbmd1YWdlPC9saT4KCQk8bGk+ e3llYXJ9IDogNC1kaWdpdCB5ZWFyPC9saT4KCQk8bGk+e3Nob3J0eWVhcn0gOiAyLWRpZ2l0 IHllYXI8L2xpPgoJCTxsaT57aXNveWVhcn0gOiA0IGRpZ2l0IDxzcGFuIGNsYXNzPSJjYXBz Ij5JU088L3NwYW4+IHllYXI8L2xpPgoJCTxsaT57c2hvcnRpc295ZWFyfSA6IDIgZGlnaXQg PHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4geWVhcjwvbGk+CgkJPGxpPntldmlkfSA6 IGV2ZW50IChhcnRpY2xlKSBJRDwvbGk+CgkJPGxpPntldmVudHN9IDogYWxsIGV2ZW50cyBm b3IgdGhlIGRheTwvbGk+CgkJPGxpPntzdGFuZGFyZH0gOiBvbmx5IHN0YW5kYXJkIGV2ZW50 czwvbGk+CgkJPGxpPntyZWN1cmZpcnN0fSAvIHtyZWN1cn0gOiB2YXJpb3VzIHJlY3Vycmlu ZyBldmVudHM8L2xpPgoJCTxsaT57YWxscmVjdXJ9IDogYWxsIHJlY3VycmluZyBldmVudHMg Zm9yIHRoZSBkYXk8L2xpPgoJCTxsaT57bXVsdGlmaXJzdH0gLyB7bXVsdGl9IC8ge211bHRp cHJldn0gLyB7bXVsdGlsYXN0fSA6IHZhcmlvdXMgbXVsdGkgZXZlbnRzPC9saT4KCQk8bGk+ e2FsbG11bHRpfSA6IGFsbCBtdWx0aSBldmVudHMgZm9yIHRoZSBkYXk8L2xpPgoJCTxsaT57 Y2FuY2VsfSA6IG9ubHkgY2FuY2VsbGVkIGV2ZW50czwvbGk+CgkJPGxpPntleHRyYX0gOiBv bmx5IGV4dHJhIGV2ZW50czwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0iaGRyZm9ybSI+VXNpbmcg YSA8Y29kZT5oZWFkZXJmb3JtPC9jb2RlPjwvaDM+CgoJPHA+WW91IGNhbiBjcmVhdGUgeW91 ciBvd24gaGVhZGVyIGlmIHlvdSB3aXNoIGFuZCBlbXBsb3kgYW55IG9mIHRoZSBmb2xsb3dp bmcgcmVwbGFjZW1lbnRzIGluIHRoZSBtYXJrdXA6PC9wPgoKCTx1bD4KCQk8bGk+e2ZpcnN0 ZGF5fSA6IGN1cnJlbnQgd2Vla2RheSAoYXMgYSBudW1iZXIgZnJvbSAwIHRvIDYpPC9saT4K CQk8bGk+e2RheW5hbWVzfSA6IGNvbW1hLXNlcGFyYXRlZCBkYXkgbmFtZXM8L2xpPgoJCTxs aT57aXNvd2Vla2hlYWR9IDogPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBo ZWFkaW5nPC9saT4KCQk8bGk+e3dlZWt9IDogPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bh bj4gd2VlazwvbGk+CgkJPGxpPnttb250aH0gOiBtb250aDwvbGk+CgkJPGxpPnt5ZWFyfSA6 IHllYXI8L2xpPgoJCTxsaT57aXNveWVhcn0gOiA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9z cGFuPiB5ZWFyPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJzaXplZGlmZiI+RGlmZmVyZW5jZXMg YmV0d2VlbiBsYXJnZSBhbmQgc21hbGwgY2FsZW5kYXJzPC9oMz4KCgk8dWw+CgkJPGxpPjxj b2RlPmNlbGxmb3JtPC9jb2RlPiBjYW5ub3QgYmUgdXNlZCBvbiBhIHNtYWxsIGNhbGVuZGFy PC9saT4KCQk8bGk+QnkgZGVmYXVsdCwgbm8gZXZlbnQgZGVzY3JpcHRpb25zIGFyZSBwbGFj ZWQgaW4gdGhlIHNtYWxsIGNhbGVuZGFyLiBZb3UgY2FuIGFkZCB0aGVtIHlvdXJzZWxmIGlm IHlvdSB3aXNoIHVzaW5nIGEgZm9ybS9jb250YWluZXI8L2xpPgoJCTxsaT5UaGUgb25seSB0 aGluZyByZW5kZXJlZCBpbiBhIHNtYWxsIGNhbGVuZGFyIGNlbGwgaXMgdGhlIGh5cGVybGlu a2VkIGRhdGUgYW5kIGFueSBmbGFncyBzbyB5b3UgY2FuIHN0eWxlIHRoZSBib3hlczwvbGk+ CgkJPGxpPjxjb2RlPmNsYXNzbGV2ZWxzPC9jb2RlPiBhcmUgaWdub3JlZDogZXZlcnl0aGlu ZyBpcyBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGF0IHRoZSBjZWxsIGxldmVsIChpLmUuIDxj b2RlPmNlbGxwbHVzPC9jb2RlPiBpcyBzZXQpPC9saT4KCQk8bGk+PGNvZGU+ZXZlbnRjbGFz c2VzPC9jb2RlPiBhcmUgc3RpbGwgaG9ub3VyZWQgaWYgeW91IHdpc2ggdG8gdXNlIGEgZm9y bSB0byBwcm9jZXNzIHRoZW0geW91cnNlbGY8L2xpPgoJCTxsaT5UaGUgc21hbGwgY2FsZW5k YXIgb3V0cHV0cyB5ZWFyLW1vbnRoLWRheS10aXRsZSBvciBtZXNzeSBwZXJtbGlua3Mgb25s eTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iaWZjYWwiPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRf aWZfY2FsJmd0OzwvY29kZT48L2gyPgoKCTxwPlRoaXMgY29uZGl0aW9uYWwgdGFnIGFsbG93 cyB5b3UgJiM4MjEyOyBpbnNpZGUgeW91ciBjb250YWluZXIvZm9ybXMgICYjODIxMjsgdG8g dGVzdCBjZXJ0YWluIGNvbmRpdGlvbnMgb2YgdGhlIGN1cnJlbnQgZXZlbnQvY2VsbC4gRm9y IGVuaGFuY2VkIGNvbmRpdGlvbmFsIGNoZWNraW5nIChwZXJoYXBzIGluIGNvbmp1bmN0aW9u IHdpdGggPGEgaHJlZj0iI2NhbG5vdyI+c21kX2NhbF9ub3c8L2E+KSwgY29uc2lkZXIgdGhl IHNtZF9pZiBwbHVnaW4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHVuc2V0IHVubGVzcyBzdGF0 ZWQgb3RoZXJ3aXNlLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMiIGlkPSJhdHRzaWZjYWwiPkF0 dHJpYnV0ZXM8L2gzPgoKCTxkbD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmZsYWc8L3Nw YW4+PC9kdD4KCQk8ZGQ+VGhlIGNlbGwgb3IgZXZlbnQgZmxhZyhzKSB5b3Ugd2FudCB0byB0 ZXN0LCBlYWNoIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBMaXN0IG9uZSBvciBtb3JlIG9mOgoJ PGRsPgoJCTxkZD5ldmVudDwvZGQ+CgkJPGRkPnN0YW5kYXJkPC9kZD4KCQk8ZGQ+cmVjdXJm aXJzdDwvZGQ+CgkJPGRkPnJlY3VyPC9kZD4KCQk8ZGQ+bXVsdGlmaXJzdDwvZGQ+CgkJPGRk Pm11bHRpPC9kZD4KCQk8ZGQ+bXVsdGlsYXN0PC9kZD4KCQk8ZGQ+bXVsdGlwcmV2PC9kZD4K CQk8ZGQ+Y2FuY2VsPC9kZD4KCQk8ZGQ+b21pdDwvZGQ+CgkJPGRkPmV4dHJhPC9kZD4KCQk8 ZGQ+aG9sczwvZGQ+CgkJPGRkPnRvZGF5PC9kZD4KCQk8ZGQ+PHNwYW4gY2xhc3M9ImNhcHMi PlNNRDwvc3Bhbj5fQU5ZICh3aWxsIHRyaWdnZXIgaWYgdGhlIGNlbGwgb3IgZXZlbnQgY29u dGFpbnMgYW55IG9mIHRoZSBhYm92ZSk8L2RkPgoJPC9kbD48L2RkPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+Y2FsaWQ8L3NwYW4+PC9kdD4KCQk8ZGQ+VGhlIGNhbGVuZGFyIElEIHlv dSB3aXNoIHRvIGNoZWNrIGZvciBhIG1hdGNoPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0 bm0iPnllYXI8L3NwYW4+PC9kdD4KCQk8ZGQ+VGhlIHllYXIgdGhlIGN1cnJlbnQgY2VsbCBm YWxscyBpbjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5pc295ZWFyPC9zcGFuPjwv ZHQ+CgkJPGRkPlRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB5ZWFyIHRoZSBj dXJyZW50IGNlbGwgZmFsbHMgaW48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+bW9u dGg8L3NwYW4+PC9kdD4KCQk8ZGQ+VGhlIG1vbnRoIG51bWJlciAoMS0xMikgdGhhdCB0aGUg Y3VycmVudCBjZWxsIGZhbGxzIGluPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPndl ZWs8L3NwYW4+PC9kdD4KCQk8ZGQ+VGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+ IHdlZWsgbnVtYmVyIHRoYXQgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbjwvZGQ+CgkJPGR0 PjxzcGFuIGNsYXNzPSJhdG5tIj5kYXk8L3NwYW4+PC9kdD4KCQk8ZGQ+VGhlIGRheSBudW1i ZXIgdGhlIGN1cnJlbnQgY2VsbCBmYWxscyBpbjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJh dG5tIj5sb2dpYzwvc3Bhbj48L2R0PgoJCTxkZD5NZXRob2Qgb2YgY29tYmluaW5nIHRoZSBu b21pbmF0ZWQgdGVzdHMuIE9wdGlvbnM6Cgk8ZGw+CgkJPGRkPm9yOiB0YWcgd2lsbCB0cmln Z2VyIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgdGVzdHMgaXMgdHJ1ZTwvZGQ+CgkJPGRkPmFu ZDogdGFnIHdpbGwgb25seSB0cmlnZ2VyIGlmIGFsbCB0aGUgdGVzdHMgYXJlIHRydWU8L2Rk PgoJPC9kbD48L2RkPgoJCTxkZD5EZWZhdWx0OiBvcjwvZGQ+Cgk8L2RsPgoKCTxwPiYjODIx NjtBbmQmIzgyMTc7IGxvZ2ljIGlzIHVzZWZ1bCBmb3IgY2hlY2tpbmcgaWYgdGhlIGNlbGwg aXMgb2YgYSBjZXJ0YWluIHR5cGUgPHNwYW4gY2xhc3M9ImNhcHMiPkFORDwvc3Bhbj4gaXMg bGF0ZXIgdGhhbiB0aGUgMTV0aCBvZiB0aGUgbW9udGgsIGZvciBleGFtcGxlLjwvcD4KCgk8 cD5SdWRpbWVudGFyeSBjb21wYXJhdG9ycyBjYW4gYmUgYXBwbGllZCB0byB0aGUgPGNvZGU+ KGlzbyl5ZWFyPC9jb2RlPiwgPGNvZGU+bW9udGg8L2NvZGU+LCA8Y29kZT53ZWVrPC9jb2Rl PiBhbmQgPGNvZGU+ZGF5PC9jb2RlPiBhdHRyaWJ1dGVzLiBOb3JtYWxseSB0aGUgdmFsdWUg eW91IHN1cHBseSB3aWxsIGJlIHRlc3RlZCBmb3IgYW4gZXhhY3QgbWF0Y2ggYnV0IGlmIHlv dSBwcmVmaXggaXQgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgc2VxdWVu Y2VzIHRoZW4gdGhlIGJlaGF2aW91ciBjaGFuZ2VzOjwvcD4KCgk8dWw+CgkJPGxpPjxjb2Rl PiZndDs8L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGdp dmVuIHZhbHVlIChlLmcuIDxjb2RlPnllYXI9JnF1b3Q7Jmd0OzIwMDgmcXVvdDs8L2NvZGU+ KTwvbGk+CgkJPGxpPjxjb2RlPiZndDs9PC9jb2RlPiB0ZXN0cyBpZiBhdHRyaWJ1dGUgaXMg Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZSAoZS5nLiA8Y29kZT5t b250aD0mcXVvdDsmZ3Q7PTcmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZsdDs8 L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyBsZXNzIHRoYW4gdGhlIGdpdmVuIHZhbHVl PC9saT4KCQk8bGk+PGNvZGU+Jmx0Oz08L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyBs ZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlPC9saT4KCQk8bGk+PGNvZGU+ ITwvY29kZT4gdGVzdHMgaWYgYXR0cmlidXRlIGlzIDxlbT5ub3Q8L2VtPiB0aGUgZ2l2ZW4g dmFsdWUgKGUuZy4gPGNvZGU+ZGF5PSZxdW90OyExNSZxdW90OzwvY29kZT4pPC9saT4KCTwv dWw+CgoJPGgyIGlkPSJjYWxpbmZvIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2NhbF9pbmZv IC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+SW5zaWRlIHlvdXIgc21kX2NhbGVuZGFyIGNvbnRh aW5lci9mb3JtcywgdXNlIHRoaXMgdGFnIHRvIG91dHB1dCBjZXJ0YWluIGluZm9ybWF0aW9u IGFib3V0IHRoZSBjdXJyZW50IGV2ZW50LjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0i YXR0c2NhbGluZm8iPkF0dHJpYnV0ZXM8L2gzPgoKCTxkbD4KCQk8ZHQ+PHNwYW4gY2xhc3M9 ImF0bm0iPnR5cGU8L3NwYW4+PC9kdD4KCQk8ZGQ+Q29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Yg dHlwZXMgb2YgaW5mb3JtYXRpb24geW91IHdhbnQgdG8gZGlzcGxheS4gT3B0aW9uczoKCTxk bD4KCQk8ZGQ+ZmxhZzwvZGQ+CgkJPGRkPmNhbGlkPC9kZD4KCQk8ZGQ+KGlzbyl5ZWFyPC9k ZD4KCQk8ZGQ+bW9udGg8L2RkPgoJCTxkZD53ZWVrPC9kZD4KCQk8ZGQ+ZGF5PC9kZD4KCQk8 ZGQ+cyAoY3VycmVudCBzZWN0aW9uKTwvZGQ+CgkJPGRkPmNhdGVnb3J5PC9kZD4KCQk8ZGQ+ YXV0aG9yPC9kZD4KCQk8ZGQ+cmVhbG5hbWU8L2RkPgoJCTxkZD5hcnRpY2xlIChpZCBvZiB0 aGUgY3VycmVudGx5IHZpZXdlZCBhcnRpY2xlKTwvZGQ+CgkJPGRkPmFueSBvdGhlciBhcnRp Y2xlIHZhcmlhYmxlIHN1Y2ggYXMgPGNvZGU+c2VjdGlvbjwvY29kZT4gKHRoZSBjdXJyZW50 IGFydGljbGUmIzgyMTc7cyBzZWN0aW9uKSwgPGNvZGU+YXV0aG9yaWQ8L2NvZGU+LCA8Y29k ZT5hcnRpY2xlX2ltYWdlPC9jb2RlPiwgZXRjPC9kZD4KCTwvZGw+PC9kZD4KCQk8ZGQ+SWYg dXNpbmcgdGhlIDxjb2RlPmh0bWw8L2NvZGU+IGF0dHJpYnV0ZSwgeW91IG1heSBvcHRpb25h bGx5IHNwZWNpZnkgdGhlIG5hbWUgeW91IHdhbnQgdGhlIHZhcmlhYmxlIHRvIGFwcGVhciBh cyBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc3RyaW5nLiBUaGUgdmFy aWFibGVzIGFsbCB0YWtlIG9uIHNlbnNpYmxlIGRlZmF1bHRzIChlLmcuICYjODIxNjtzZWN0 aW9uJiM4MjE3OyBiZWNvbWVzIDxjb2RlPj9zPSZsdDtzZWN0aW9uIG5hbWUmZ3Q7PC9jb2Rl PiwgJiM4MjE2O2NhdGVnb3J5MSYjODIxNzsgYmVjb21lcyA8Y29kZT4/Yz0mbHQ7Y2F0ZWdv cnkxIG5hbWUmZ3Q7PC9jb2RlPiwgZXRjKS48L2RkPgoJCTxkZD5FeGFtcGxlOiA8Y29kZT4m bHQ7dHhwOnNtZF9jYWxfaW5mbyB0eXBlPSZxdW90O2NhdGdlb3J5OnRoZV9jYXQmcXVvdDsg aHRtbD0mcXVvdDsxJnF1b3Q7IC8mZ3Q7PC9jb2RlPiBtZWFucyB5b3Ugd291bGQgc2VlIDxj b2RlPj90aGVfY2F0PSZsdDtjYXRlZ29yeTEgbmFtZSZndDs8L2NvZGU+IGluIHRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IGZsYWc8L2Rk PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+am9pbjwvc3Bhbj48L2R0PgoJCTxkZD5UaGUg Y2hhcmFjdGVycyB5b3Ugd2FudCB0byB1c2UgdG8gc2VwYXJhdGUgZWFjaCBpdGVtIHlvdSBh c2tlZCBmb3IuIE5vdGUgaXQgaXMgdGhlIGNoYXJhY3RlcnMgPGVtPmJldHdlZW48L2VtPiBl YWNoIGl0ZW0gc28gdGhlIHZlcnkgZmlyc3QgZW50cnkgd2lsbCA8c3Ryb25nPm5vdDwvc3Ry b25nPiBoYXZlIHRoZSA8Y29kZT5qb2luPC9jb2RlPiBpbiBmcm9udCBvZiBpdCAoc2VlIDxj b2RlPmpvaW5fcHJlZml4PC9jb2RlPik8L2RkPgoJCTxkZD5EZWZhdWx0OiBhIHNwYWNlPC9k ZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmpvaW5fcHJlZml4PC9zcGFuPjwvZHQ+CgkJ PGRkPlRoZSBzdHJpbmcgeW91IHdhbnQgdG8gcHV0IGluIGZyb250IG9mIHRoZSBmaXJzdCBp dGVtIGluIHRoZSByZXR1cm5lZCBsaXN0LiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgdGhpcyBh dHRyaWJ1dGUgaXQgdHJpZXMgdG8gYmUgY2xldmVyOgoJPGRsPgoJCTxkZD5JZiB1c2luZyA8 Y29kZT50eXBlPSZxdW90O2ZsYWcmcXVvdDs8L2NvZGU+IHRoZSBqb2luX3ByZWZpeCBpcyBz ZXQgdG8gdGhlIHNhbWUgYXMgPGNvZGU+am9pbjwvY29kZT4uIFRodXMgd2l0aCA8Y29kZT5q b2luPSZxdW90OyBjYWxfJnF1b3Q7PC9jb2RlPiB5b3UgbWlnaHQgZ2V0IDxjb2RlPiBjYWxf bXVsdGkgY2FsX3RvZGF5IGNhbF9ob2xzPC9jb2RlPjwvZGQ+CgkJPGRkPklmIHVzaW5nIDxj b2RlPmh0bWw9JnF1b3Q7MSZxdW90OzwvY29kZT4gdGhlIGpvaW5fcHJlZml4IGlzIHNldCB0 byBhIHF1ZXN0aW9uIG1hcmssIHRodXM6IDxjb2RlPnR5cGU9JnF1b3Q7bW9udGgseWVhcixj YXRlZ29yeSZxdW90OyBodG1sPSZxdW90OzEmcXVvdDs8L2NvZGU+IG1pZ2h0IHJlbmRlciA8 Y29kZT4/bT0xMiZhbXA7eT0yMDA4JmFtcDtjPWdpZ3M8L2NvZGU+LCB3aGljaCBjYW4gYmUg cHV0IHN0cmFpZ2h0IG9uIHRoZSBlbmQgb2YgYW4gYW5jaG9yPC9kZD4KCTwvZGw+PC9kZD4K CQk8ZGQ+RGVmYXVsdDogPGNvZGU+U01EX0FVVE88L2NvZGU+PC9kZD4KCQk8ZHQ+PHNwYW4g Y2xhc3M9ImF0bm0iPmh0bWw8L3NwYW4+PC9kdD4KCQk8ZGQ+Q29udHJvbCBpbiB3aGljaCBm b3JtYXQgdGhlIGluZm9ybWF0aW9uIGlzIHJldHVybmVkLiBPcHRpb25zOgoJPGRsPgoJCTxk ZD4wOiByZXR1cm4gaXRlbXMgdmVyYmF0aW08L2RkPgoJCTxkZD4xOiByZXR1cm4gaXRlbXMg YXMgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBwYXJhbWV0ZXIgc3RyaW5nLiBU aGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIGJ1aWxkaW5nIHlvdXIgb3duIGNvbnRlbnQgaW5z aWRlIGVhY2ggY2VsbCB2aWEgYSA8Y29kZT5mb3JtPC9jb2RlPiBhbmQgd2lzaCB0byBtYWlu dGFpbiB0aGUgY3VycmVudCBzZWFyY2ggZW52aXJvbm1lbnQuIElmIHlvdSBhbGxvdyBwZW9w bGUgdG8gZmlsdGVyIGV2ZW50cyBieSBjYXRlZ29yeSBvciBhdXRob3IgeW91IGNhbiB1c2Ug dGhpcyB0byByZXR1cm4gdGhlICYjODIxNjtjdXJyZW50JiM4MjE3OyBzdGF0ZSBvZiBjZXJ0 YWluIHZhcmlhYmxlcyBzbyB5b3UgY2FuIHBhc3MgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGFu ZCBtYWludGFpbiBzdGF0ZTwvZGQ+Cgk8L2RsPjwvZGQ+CgkJPGRkPk5vdGU6IFNldHRpbmcg dGhpcyBhdHRyaWJ1dGUgdG8gMSBvdmVycmlkZXMgdGhlIDxjb2RlPmpvaW48L2NvZGU+IGF0 dHJpYnV0ZSBhbmQgc2V0cyBpdCB0byBhbiBhbXBlcnNhbmQ8L2RkPgoJCTxkZD5EZWZhdWx0 OiAwPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmVzY2FwZTwvc3Bhbj48L2R0PgoJ CTxkZD5Fc2NhcGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGVudGl0aWVzIHN1 Y2ggYXMgPGNvZGU+Jmx0OzwvY29kZT4sIDxjb2RlPiZndDs8L2NvZGU+IGFuZCA8Y29kZT4m YW1wOzwvY29kZT4gZm9yIHBhZ2UgdmFsaWRhdGlvbiBwdXJwb3Nlcy4gVXNlIDxjb2RlPmVz Y2FwZT0mcXVvdDsmcXVvdDs8L2NvZGU+IHRvIHR1cm4gdGhpcyBvZmY8L2RkPgoJCTxkZD5E ZWZhdWx0OiA8Y29kZT5odG1sPC9jb2RlPjwvZGQ+Cgk8L2RsPgoKCTxoMiBpZD0iY2FsY2xh c3MiPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfY2FsX2NsYXNzIC8mZ3Q7PC9jb2RlPjwvaDI+ CgoJPHA+SW5zaWRlIHlvdXIgc21kX2NhbGVuZGF0IGNvbnRhaW5lci9mb3JtcywgdXNlIHRo aXMgdGFnIHRvIGFkZCBhIGxpc3Qgb2YgY2xhc3NlcyB0byB0aGUgY3VycmVudCBjZWxsL2V2 ZW50LiBWZXJ5IHVzZWZ1bCBpZiBidWlsZGluZyBjZWxscyB5b3Vyc2VsZiBiZWNhdXNlIGlu c2lkZSBhIDxhIGhyZWY9IiNpZmNhbCI+Y29uZGl0aW9uYWw8L2E+IHRhZyB5b3UgY291bGQg YWRkIHBhcnRpY3VsYXIgY2xhc3MgbmFtZXMgYmFzZWQgb24gc29tZSB2YWx1ZSBpbiBhIGNl bGwuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzY2FsY2xhc3MiPkF0dHJpYnV0 ZXM8L2gzPgoKCTxkbD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm5hbWU8L3NwYW4+PC9k dD4KCQk8ZGQ+Q29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3NuYW1lcyB0byBhZGQgdG8g dGhlIGN1cnJlbnQgY2VsbC9ldmVudC4gVGhlc2UgYXJlIDxzdHJvbmc+bm90PC9zdHJvbmc+ IHN1YmplY3QgdG8gYW55IDxjb2RlPmNsYXNzcHJlZml4ZXM8L2NvZGU+IHNvIHdpbGwgYWx3 YXlzIGFwcGVhciBleGFjdGx5IGFzIHlvdSB3cml0ZSB0aGVtPC9kZD4KCQk8ZGQ+RGVmYXVs dDogdW5zZXQ8L2RkPgoJPC9kbD4KCgk8aDIgaWQ9ImNhbG5vdyI+VGFnOiA8Y29kZT4mbHQ7 dHhwOnNtZF9jYWxfbm93IC8mZ3Q7PC9jb2RlPjwvaDI+CgoJPHA+UmV0dXJuIHRoZSBjdXJy ZW50IGRhdGUvdGltZSwgZm9ybWF0dGVkIGhvd2V2ZXIgeW91IHBsZWFzZS4gVXNlZnVsIGZv ciBleHRyYWN0aW5nIHBhcnRzIG9mIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lc3RhbXAgdG8g Y29tcGFyZSB0aGluZ3MgdmlhIG90aGVyIGNvbmRpdGlvbmFsIHBsdWdpbnMgb3IgdGhlIDxj b2RlPiZsdDt0eHA6c21kX2lmX2NhbCZndDs8L2NvZGU+IHRhZy48L3A+CgoJPGgzIGNsYXNz PSJhdHRzICIgaWQ9ImF0dHNjYWxub3ciPkF0dHJpYnV0ZXM8L2gzPgoKCTxkbD4KCQk8ZHQ+ PHNwYW4gY2xhc3M9ImF0bm0iPmZvcm1hdDwvc3Bhbj48L2R0PgoJCTxkZD5UaGUgd2F5IHlv dSB3YW50IHRoZSBkYXRlL3RpbWUgcmVwcmVzZW50ZWQuIFVzZSBhbnkgdmFsaWQgPGEgaHJl Zj0iaHR0cDovL3VrMi5waHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBzdHJpbmcu IEhhcyBmdWxsIFdpbmRvd3Mgc3VwcG9ydCwgZXZlbiBmb3IgdGhvc2UgdmFsdWVzIHdoZXJl IHN0cmZ0aW1lKCkgaW5kaWNhdGVzIG90aGVyd2lzZTwvZGQ+CgkJPGRkPkRlZmF1bHQ6IHRo ZSBkYXRlIGZvcm1hdCBzZXQgaW4gQmFzaWMgUHJlZmVyZW5jZXMuPC9kZD4KCQk8ZHQ+PHNw YW4gY2xhc3M9ImF0bm0iPm5vdzwvc3Bhbj48L2R0PgoJCTxkZD5JZiB5b3UgZG9uJiM4MjE3 O3Qgd2FudCB0aGUgdGltZSB0byBiZSAmIzgyMTY7bm93JiM4MjE3OyB5b3UgY2FuIHN0YXRl IHdoYXQgdGltZSAmIzgyMTY7bm93JiM4MjE3OyBpcyEgVXNlIGFueSBzdGFuZGFyZCBkYXRl L3RpbWUgZm9ybWF0PC9kZD4KCQk8ZGQ+WW91IG1heSBhbHNvIHVzZSB0aGUgY29kZXMgPGNv ZGU+P2RheTwvY29kZT4sIDxjb2RlPj9tb250aDwvY29kZT4gb3IgPGNvZGU+P3llYXI8L2Nv ZGU+IGluIHlvdXIgdGltZSBzdHJpbmcgd2hpY2ggd2lsbCBkbyBvbmUgb2YgdHdvIHRoaW5n czoKCTxkbD4KCQk8ZGQ+cmVwbGFjZSB0aGUgY29kZXMgd2l0aCB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj4gcGFyYW1ldGVycyA8Y29kZT5kPTwvY29kZT4sIDxjb2RlPm09 PC9jb2RlPiBvciA8Y29kZT55PTwvY29kZT4sIGlmIHRoZXkgYXJlIGJlaW5nIHVzZWQ8L2Rk PgoJCTxkZD51c2UgdGhlIGN1cnJlbnQgZGF5LCBtb250aCBvciB5ZWFyIChpLmUuIHRoZSBw YXJ0cyBvZiB0b2RheSYjODIxNztzIGRhdGUpPC9kZD4KCTwvZGw+PC9kZD4KCQk8ZGQ+RGVm YXVsdDogbm93ISAodGhlIHRpbWUgYXQgd2hpY2ggeW91IGNhbGwgdGhlIHRhZyk8L2RkPgoJ CTxkdD48c3BhbiBjbGFzcz0iYXRubSI+b2Zmc2V0PC9zcGFuPjwvZHQ+CgkJPGRkPkFuIG9m ZnNldCBpbnRvIHRoZSBmdXR1cmUgdGhhdCB5b3Ugd2lzaCB0byBhcHBseSB0byA8Y29kZT5u b3c8L2NvZGU+PC9kZD4KCQk8ZGQ+RXhhbXBsZTogPGNvZGU+MiBtb250aHM8L2NvZGU+LiBT ZWUgPGEgaHJlZj0iI2VnNiI+RXhhbXBsZSA2PC9hPiBmb3IgYSBwcmFjdGljYWwgYXBwbGlj YXRpb24gb2YgdGhpcyBhdHRyaWJ1dGU8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ Z210PC9zcGFuPjwvZHQ+CgkJPGRkPlJldHVybiBlaXRoZXI6Cgk8ZGw+CgkJPGRkPjA6IGxv Y2FsIHRpbWUgYWNjb3JkaW5nIHRvIHRoZSB0aW1lIHpvbmUgc2V0IGluIEJhc2ljIFByZWZz PC9kZD4KCQk8ZGQ+MTogPHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwvc3Bhbj4gdGltZTwvZGQ+ Cgk8L2RsPjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDA8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+bGFuZzwvc3Bhbj48L2R0PgoJCTxkZD5BbiA8c3BhbiBjbGFzcz0iY2FwcyI+SVNP PC9zcGFuPiBsYW5ndWFnZSBjb2RlIHRoYXQgZm9ybWF0cyB0aW1lIHN0cmluZ3Mgc3VpdGFi bGUgZm9yIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgKG9yIGxvY2FsZSkgYXMgZGVmaW5lZCBi eSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT182MzkiPjxzcGFu IGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IDYzOTwvYT48L2RkPgoJCTxkZD5EZWZhdWx0OiB1 bnNldCAoaS5lLiB1c2UgdGhlIHZhbHVlIGFzIHN0YXRlZCBpbiA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBwcmVmcyk8L2RkPgoJPC9kbD4KCgk8aDIgaWQ9ImFydGV2Ij5UYWc6 IDxjb2RlPiZsdDt0eHA6c21kX2FydGljbGVfZXZlbnQgLyZndDs8L2NvZGU+PC9oMj4KCgk8 cD5XaGVuIHlvdSBjcmVhdGUgcmVjdXJyaW5nIGV2ZW50cywgdGhleSByZWFsbHkgb25seSBl eGlzdCBvbmNlIGFzIGEgc2luZ2xlIGFydGljbGU7IHRoZSByZXBldGl0aW9uIGlzIGEgdHJp Y2suIFRodXMgdGhlIGJ1aWx0LWluIGFydGljbGUgdGFncyBvbmx5IHNob3cgdGhlIHNpbmds ZSwgcmVhbCBhcnRpY2xlcy48L3A+CgoJPHA+VGhpcyB0YWcgJiM4MjEyOyBzaW1pbGFyIGlu IGZ1bmN0aW9uIHRvIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZV9jdXN0b20gLyZndDs8L2NvZGU+ ICYjODIxMjsgYWxsb3dzIHlvdSB0byBsaXN0IHJlY3VycmluZyBhcnRpY2xlcyBhcyBpZiB0 aGV5IHdlcmUgJiM4MjE2O3JlYWwmIzgyMTc7IGFydGljbGVzIGluIHRoZSBkYXRhYmFzZS4g PHNwYW4gY2xhc3M9ImltcG9ydGFudCI+VGhleSBkb24mIzgyMTc7dCBiZWNvbWUgcmVhbCBh cnRpY2xlcywgdGhleSBhcmUganVzdCBsaXN0ZWQgYXMgc3VjaDwvc3Bhbj4uPC9wPgoKCTxw Pkluc2lkZSB0aGUgdGFnJiM4MjE3O3MgPGNvZGU+Zm9ybTwvY29kZT4gb3IgY29udGFpbmVy IHlvdSBjYW4gdXNlIGFsbCBleGlzdGluZyBhcnRpY2xlIHRhZ3MgdG8gZGlzcGxheSBhbnkg aW5mb3JtYXRpb24geW91IGxpa2UgYWJvdXQgZWFjaCAmIzgyMTY7dmlydHVhbCYjODIxNzsg YXJ0aWNsZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdW5zZXQgdW5sZXNzIHN0YXRlZCBvdGhl cndpc2UuPC9wPgoKCTxoMz5JZGVudGljYWwgYXR0cmlidXRlcyB0byA8YSBocmVmPSIjc21k Y2FsIj5zbWRfY2FsZW5kYXI8L2E+OjwvaDM+CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+c3RlcGZpZWxkPC9zcGFuPjwvZHQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5z a2lwZmllbGQ8L3NwYW4+PC9kdD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm9taXRmaWVs ZDwvc3Bhbj48L2R0PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZXh0cmFmaWVsZDwvc3Bh bj48L2R0PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZGF0ZWZpZWxkczwvc3Bhbj48L2R0 PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+c2VjdGlvbjwvc3Bhbj48L2R0PgoJCTxkdD48 c3BhbiBjbGFzcz0iYXRubSI+Y2F0ZWdvcnk8L3NwYW4+PC9kdD4KCQk8ZHQ+PHNwYW4gY2xh c3M9ImF0bm0iPmF1dGhvcjwvc3Bhbj48L2R0PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ cmVhbG5hbWU8L3NwYW4+PC9kdD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnN0YXR1czwv c3Bhbj48L2R0PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+dGltZTwvc3Bhbj48L2R0PgoJ CTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZXhwaXJlZDwvc3Bhbj48L2R0PgoJPC9kbD4KCgk8 aDM+T3RoZXIgYXR0cmlidXRlczwvaDM+CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRu bSI+aWQ8L3NwYW4+PC9kdD4KCQk8ZGQ+UmVzdHJpY3QgZXZlbnRzIHRvIHRoaXMgbGlzdCBv ZiBhcnRpY2xlIElEczwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5jdXN0b208L3Nw YW4+PC9kdD4KCQk8ZGQ+U3BlY2lmeSB5b3VyIG93biBjb21tYS1zZXBhcmF0ZWQgbGlzdCBv ZiBjdXN0b20gZmllbGQgY2xhdXNlcyB0byB0aGUgcXVlcnkuIFNlcGFyYXRlIGVhY2ggZmll bGQgZnJvbSBpdHMgKG9wdGlvbmFsKSBvcGVyYXRvciBhbmQgY2xhdXNlIHdpdGggYSBjb2xv biAoYWx0ZXJhYmxlIHZpYSA8Y29kZT5wYXJhbV9kZWxpbTwvY29kZT4pLjwvZGQ+CgkJPGRk PkV4YW1wbGU6IDxjb2RlPmN1c3RvbT0mcXVvdDtjdXN0b21fMzpsaWtlOkxpb24lLCBjdXN0 b21fNjpDaGVzc2luZ3RvbiZxdW90OzwvY29kZT4gd291bGQgYWRkIDxjb2RlPkFORCBjdXN0 b21fMyBsaWtlICYjMzk7TGlvbiUmIzM5OyBBTkQgY3VzdG9tXzY9JiMzOTtDaGVzc2luZ3Rv biYjMzk7PC9jb2RlPiB0byB0aGUgZGF0YWJhc2UgcXVlcnkuPC9kZD4KCQk8ZHQ+PHNwYW4g Y2xhc3M9ImF0bm0iPnBhcmFtX2RlbGltPC9zcGFuPjwvZHQ+CgkJPGRkPkFsdGVyIHRoZSBz ZXBhcmF0b3IgY2hhcmFjdGVyKHMpIGJldHdlZW4gZmllbGQtY2xhdXNlIGl0ZW1zIGluIHRo ZSA8Y29kZT5jdXN0b208L2NvZGU+IGF0dHJpYnV0ZS48L2RkPgoJCTxkZD5EZWZhdWx0OiBj b2xvbiAoOik8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+dHlwZTwvc3Bhbj48L2R0 PgoJCTxkZD5Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBldmVudCB0eXBlcyB0byBkaXNwbGF5 LiBPcHRpb25zOgoJPGRsPgoJCTxkZD5zdGFuZGFyZDwvZGQ+CgkJPGRkPnJlY3VyPC9kZD4K CQk8ZGQ+bXVsdGk8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5EZWZhdWx0OiBzdGFuZGFyZCwg cmVjdXIsIG11bHRpPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmFsbHNwYW5uZWQ8 L3NwYW4+PC9kdD4KCQk8ZGQ+Q29udHJvbCBkaXNwbGF5IG9mIHNwYW5uZWQgZXZlbnRzOjwv ZGQ+CgkJPGRkPjA6IGFueSBldmVudCB0aGF0IGhhcyBhIHN0YXJ0IGRhdGUgaW4gdGhlIHBh c3Qgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIGxpc3Q8L2RkPgoJCTxkZD4xOiBkaXNwbGF5 IHJlbWFpbmluZyBkYXlzIGZyb20gc3Bhbm5lZCBldmVudHMgdGhhdCBiZWdhbiBpbiB0aGUg cGFzdDwvZGQ+CgkJPGRkPkV4YW1wbGU6IHVzZSA8Y29kZT5hbGxzcGFubmVkPSZxdW90OzEm cXVvdDs8L2NvZGU+IGlmIHlvdSBhcmUgbGlzdGluZyByZW1haW5pbmcgcGVyZm9ybWFuY2Ug ZGF0ZXMgZnJvbSBhIEJyb2Fkd2F5IHNob3cmIzgyMTc7cyBzY2hlZHVsZSB0aGF0IHN0YXJ0 ZWQgc29tZSBtb250aHMgYWdvLjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDA8L2RkPgoJCTxkdD48 c3BhbiBjbGFzcz0iYXRubSI+bW9udGg8L3NwYW4+PC9kdD4KCQk8ZGQ+T25seSBzaG93IGV2 ZW50cyB0aGF0IG9jY3VyIGluIHRoZSBnaXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+WVlZWTwv c3Bhbj4tbW08L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZnJvbTwvc3Bhbj48L2R0 PgoJCTxkZD5Pbmx5IHNob3cgZXZlbnRzIHdpdGggUG9zdGVkIGRhdGVkIGJlZ2lubmluZyBh ZnRlciB0aGlzIHN0YXJ0IGRhdGUuIENhbiBiZSBhbnkgdmFsaWQgZGF0ZSBmb3JtYXQ8L2Rk PgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+dG88L3NwYW4+PC9kdD4KCQk8ZGQ+T25seSBz aG93IGV2ZW50cyB3aXRoIFBvc3RlZCBkYXRlcyB1cCB0byB0aGlzIGVuZCBkYXRlLiBDYW4g YmUgYW55IHZhbGlkIGRhdGUgZm9ybWF0PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0i PnNvcnQ8L3NwYW4+PC9kdD4KCQk8ZGQ+T3JkZXIgdGhlIGV2ZW50cyBieSB0aGlzIGNvbHVt biAoY2FzZS1zZW5zaXRpdmUpIGFuZCBzb3J0IGRpcmVjdGlvbiAoYXNjIG9yIGRlc2MpPC9k ZD4KCQk8ZGQ+RGVmYXVsdDogUG9zdGVkIGFzYzwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJh dG5tIj5mb3JtPC9zcGFuPjwvZHQ+CgkJPGRkPlBhc3MgZWFjaCBtYXRjaGluZyBldmVudCB0 byB0aGUgZ2l2ZW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gZm9ybS4gTm90ZSB0 aGF0IHVzaW5nIGEgY29udGFpbmVyIG92ZXJyaWRlcyB0aGlzIGF0dHJpYnV0ZSwgYW5kIGlm IHlvdSBzcGVjaWZ5IG5laXRoZXIgYSBmb3JtIG5vciBjb250YWluZXIsIHlvdSB3aWxsIHNl ZSBhIGxpc3Qgb2YgYXJ0aWNsZSBQb3N0ZWQgZGF0ZXM8L2RkPgoJCTxkdD48c3BhbiBjbGFz cz0iYXRubSI+cGFnaW5nPC9zcGFuPjwvZHQ+CgkJPGRkPlVubGlrZSBhcnRpY2xlX2N1c3Rv bSwgZXZlbnRzIGZyb20gdGhlIHNtZF9hcnRpY2xlX2V2ZW50IHRhZyBtYXkgYmUgcGFnZWQg dXNpbmcgPGNvZGU+Jmx0O3R4cDpvbGRlciAvJmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDt0 eHA6bmV3ZXIgLyZndDs8L2NvZGU+LiBCdXQgaWYgeW91IHdpc2ggdG8gc2hvdyBhbiBldmVu dCBsaXN0IG9uIHRoZSBzYW1lIHBhZ2UgYXMgYSBzdGFuZGFyZCBhcnRpY2xlIGxpc3QsIHRo ZSBvbGRlci9uZXdlciB0YWdzIHdpbGwgbmF2aWdhdGUgYm90aCBsaXN0cyBzaW11bHRhbmVv dXNseS4gVW5kZXIgdGhpcyBjaXJjdW1zdGFuY2UgeW91IG1heSBuZWVkIHRvIHR1cm4gcGFn aW5nIG9mZiAoMCkuIE9wdGlvbnM6Cgk8ZGw+CgkJPGRkPjAgKG9mZik8L2RkPgoJCTxkZD4x IChvbik8L2RkPgoJPC9kbD48L2RkPgoJCTxkZD5EZWZhdWx0OiAxPC9kZD4KCQk8ZHQ+PHNw YW4gY2xhc3M9ImF0bm0iPm9mZnNldDwvc3Bhbj48L2R0PgoJCTxkZD5CZWdpbiBkaXNwbGF5 aW5nIGV2ZW50cyBmcm9tIHRoaXMgbnVtZXJpYyBwb3NpdGlvbiwgaW5zdGVhZCBvZiBmcm9t IHRoZSBzdGFydCBvZiB0aGUgbGlzdCBvZiBldmVudHM8L2RkPgoJCTxkZD5EZWZhdWx0OiAw PC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmxpbWl0PC9zcGFuPjwvZHQ+CgkJPGRk PklubHkgc2hvdyB0aGlzIG1hbnkgZXZlbnRzIG1heGltdW0gPHN0cm9uZz5wZXIgcGFnZTwv c3Ryb25nPiwgaS5lLiB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0byBkaXNwbGF5LCB3aGV0aGVy IHRoZXkgY29tZSBmcm9tIG9uZSAmIzgyMTY7cmVhbCYjODIxNzsgYXJ0aWNsZSBvciBtYW55 PC9kZD4KCQk8ZGQ+RGVmYXVsdDogMTA8L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ ZXZlbnRsaW1pdDwvc3Bhbj48L2R0PgoJCTxkZD5Pbmx5IHNob3cgdGhpcyBtYW55IGV2ZW50 cyBtYXhpbXVtIDxzdHJvbmc+cGVyIGV2ZW50PC9zdHJvbmc+PC9kZD4KCQk8ZGQ+RXhhbXBs ZTogaWYgeW91IGhhdmUgYSB3ZWVrbHkgcmVwZWF0ZWQgZXZlbnQgdGhhdCBsYXN0cyBmb3Ig Zm91ciBtb250aHMgYW5kIHlvdSBzZXQgPGNvZGU+ZXZlbnRsaW1pdD0mcXVvdDs2JnF1b3Q7 PC9jb2RlPiB5b3Ugd2lsbCBvbmx5IHNlZSBhIG1heGltdW0gb2YgNiBldmVudHMgZnJvbSBl dmVyeSBhcnRpY2xlIGNvbnRhaW5pbmcgcmVwZXRpdGlvbi4gVGhlIHJhbmdlIChzdGFydCBh bmQgZW5kIGRhdGUpIGlzIGRldGVybWluZWQgYnkgb3RoZXIgcGx1Z2luIGF0dHJpYnV0ZXM8 L2RkPgoJCTxkZD5EZWZhdWx0OiAxMDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5w YWdlYnk8L3NwYW4+PC9kdD4KCQk8ZGQ+RXNvdGVyaWMgcGFnaW5nIGZlYXR1cmUsIGlkZW50 aWNhbCB0byA8Y29kZT4mbHQ7dHhwOmFydGljbGUgLyZndDs8L2NvZGU+PC9kZD4KCQk8ZGQ+ RGVmYXVsdDogc2FtZSBhcyA8Y29kZT5saW1pdDwvY29kZT48L2RkPgoJCTxkdD48c3BhbiBj bGFzcz0iYXRubSI+cGdvbmx5PC9zcGFuPjwvZHQ+CgkJPGRkPlNldCB0byAxIHRvIHBlcmZv cm0gdGhlIHBhZ2luZyBhY3Rpb24gd2l0aG91dCBkaXNwbGF5aW5nIGFueXRoaW5nLiBQcm9i YWJseSB1c2VsZXNzPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPndyYXB0YWc8L3Nw YW4+PC9kdD4KCQk8ZGQ+VGhlIChYKUhUTUwgdGFnLCB3aXRob3V0IGJyYWNrZXRzLCB0byB3 cmFwIHRoZSBsaXN0IGluPC9kZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrPC9z cGFuPjwvZHQ+CgkJPGRkPlRoZSAoWClIVE1MIHRhZyB0byBzZXBhcmF0ZSBlYWNoIGl0ZW0g d2l0aDwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bhbj48L2R0PgoJ CTxkZD5UaGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gYXBwbHkg dG8gdGhlIDxjb2RlPndyYXB0YWc8L2NvZGU+PC9kZD4KCTwvZGw+CgoJPGgzPlRoZSBzbWRf YXJ0aWNsZV9ldmVudCB0YWcgcHJvY2VzczwvaDM+CgoJPHA+SXQgaXMgd29ydGggbm90aW5n IHRoYXQgdGhpcyB0YWcgZXhlY3V0ZXMgaW4gMy1waGFzZXM6PC9wPgoKCTxvbD4KCQk8bGk+ UHJlLWZpbHRlcjogYWxsIGV2ZW50cyB0aGF0IG1hdGNoIDxjb2RlPnR5cGU8L2NvZGU+LCA8 Y29kZT5jYXRlZ29yeTwvY29kZT4sIDxjb2RlPnNlY3Rpb248L2NvZGU+LCA8Y29kZT5hdXRo b3I8L2NvZGU+LCA8Y29kZT5zdGF0dXM8L2NvZGU+LCA8Y29kZT5pZDwvY29kZT4sIGFuZCA8 Y29kZT5leHBpcmVkPC9jb2RlPiBhcmUgZXh0cmFjdGVkPC9saT4KCQk8bGk+VGltZS1maWx0 ZXI6IGFueSAmIzgyMjA7dGltZS1iYXNlZCYjODIyMTsgYXR0cmlidXRlcyBhcmUgdGhlbiBh cHBsaWVkIHRvIHRoZSBhYm92ZSBsaXN0LiBBdCB0aGlzIHBvaW50LCBhbnkgPGNvZGU+ZXh0 cmFmaWVsZDwvY29kZT4sIDxjb2RlPnN0ZXBmaWVsZDwvY29kZT4sIDxjb2RlPm9taXRmaWVs ZDwvY29kZT4sIG9yIDxjb2RlPnNraXBmaWVsZDwvY29kZT4gYXJlIGNhbGN1bGF0ZWQgdG8g ZmluZCByZXBlYXRlZCBkYXRlcyAodXAgdG8gYXMgbWFueSBhcyA8Y29kZT5ldmVudGxpbWl0 PC9jb2RlPiBhbGxvd3Mgb3IgdGhlIGNhbGN1bGF0aW9uIGV4Y2VlZHMgdGhlIGV2ZW50JiM4 MjE3O3MgZXhwaXJ5IHRpbWUpLiBUaGUgYXR0cmlidXRlcyA8Y29kZT50aW1lPC9jb2RlPiwg PGNvZGU+bW9udGg8L2NvZGU+LCA8Y29kZT5mcm9tPC9jb2RlPiwgYW5kIDxjb2RlPnRvPC9j b2RlPiBhcmUgdXNlZCB0byByZWZpbmUgdGhlIGZpbHRyYXRpb24gaGVyZTwvbGk+CgkJPGxp Pk91dHB1dDogd2hhdGV2ZXIgdGhlIHByZXZpb3VzIHBoYXNlcyBoYXZlIGxlZnQgYmVoaW5k IGlzIHN1YmplY3QgdG8gYW55IDxjb2RlPnBhZ2luZzwvY29kZT4sIDxjb2RlPm9mZnNldDwv Y29kZT4gYW5kIDxjb2RlPmxpbWl0PC9jb2RlPiB5b3UgbWF5IGhhdmUgc3BlY2lmaWVkLCB0 aGVuIHdyYXBwZWQgYW5kIGRpc3BsYXllZDwvbGk+Cgk8L29sPgoKCTxoMiBpZD0iZXZlbnRp bmZvIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2V2ZW50X2luZm8gLyZndDs8L2NvZGU+PC9o Mj4KCgk8cD5JZGVudGljYWwgdGFnIHRvIDxhIGhyZWY9IiNjYWxpbmZvIiBzdHlsZT0idGV4 dC1hbGlnbjpsZWZ0OyI+dHhwOnNtZF9jYWxpbmZvIC8mZ3Q7PC9hPiBidXQgZm9yIHVzZSBp bnNpZGUgPGNvZGU+Jmx0O3R4cDpzbWRfYXJ0aWNsZV9ldmVudCAvJmd0OzwvY29kZT4uPC9w PgoKCTxoMiBjbGFzcz0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMj4KCgk8aDMgaWQ9ImVnMSI+ RXhhbXBsZSAxOiBiYXNpYyBjYWxlbmRhcjwvaDM+CgoJPHA+WW91IGhhdmUgdGhlIGVudGly ZSBhcnNlbmFsIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRhZ3MgYXZhaWxh YmxlIHRvIHlvdSBpbiBhIGNhbGVuZGFyLiBUaHVzIHlvdSBjYW4gc2V0IHRoZSBhcnRpY2xl JiM4MjE3O3Mgc3RhcnQgYW5kIGVuZCBkYXRlcyB0byB0aGUgc2FtZSBkYXkgYW5kIHNldCB0 aGUgc3RhcnQgYW5kIGVuZCB0aW1lcyB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgYW5kIGVuZCBv ZiB0aGUgZXZlbnQuIFlvdSBjYW4gdGhlbiB1c2Ugc3RhbmRhcmQgPGNvZGU+Jmx0O3R4cDpw b3N0ZWQgLyZndDs8L2NvZGU+IG9yIDxjb2RlPiZsdDt0eHA6ZXhwaXJlcyAvJmd0OzwvY29k ZT4gdGFncyB3aXRoIHZhcmlvdXMgPGNvZGU+Zm9ybWF0PC9jb2RlPiBzdHJpbmdzIHRvIHJl bmRlciB0aGUgZXZlbnQmIzgyMTc7cyBjcml0ZXJpYS48L3A+CgoJPHA+U2ltaWxhcmx5IHlv dSBjYW4gdXNlIGFueSBvdGhlciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0YWdz IHRvIHNob3cgYXMgbXVjaCBvciBhcyBsaXR0bGUgZGV0YWlsIGFzIHlvdSBsaWtlIGluIHRo ZSBjYWxlbmRhciBjZWxsLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0i YmxvY2siPiZsdDt0eHA6c21kX2NhbGVuZGFyIHNlY3Rpb249JnF1b3Q7ZXZlbnRzJnF1b3Q7 Jmd0OwombHQ7ZGl2Jmd0OwogICBFdmVudDogJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhw OnRpdGxlIC8mZ3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDticiAvJmd0OyZsdDt0 eHA6ZXhjZXJwdCAvJmd0OwombHQ7L2RpdiZndDsKJmx0O2RpdiBjbGFzcz0mcXVvdDtldnRp bWUmcXVvdDsmZ3Q7CiAgIFN0YXJ0OiAmbHQ7dHhwOnBvc3RlZCBmb3JtYXQ9JnF1b3Q7JUg6 JU0mcXVvdDsgLyZndDsKJmx0Oy9kaXYmZ3Q7CiZsdDtkaXYgY2xhc3M9JnF1b3Q7ZXZ0aW1l JnF1b3Q7Jmd0OwogICBFbmQ6ICZsdDt0eHA6ZXhwaXJlcyBmb3JtYXQ9JnF1b3Q7JUg6JU0m cXVvdDsgLyZndDsKJmx0Oy9kaXYmZ3Q7CiZsdDsvdHhwOnNtZF9jYWxlbmRhciZndDsKPC9j b2RlPjwvcHJlPgoKCTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI6IGNvbmRpdGlvbmFsIGNhbGVu ZGFyPC9oMz4KCgk8cD5Vc2luZyB0aGUgY29uZGl0aW9uYWwgdGFnIHlvdSBjYW4gdGFrZSBh Y3Rpb24gaWYgY2VydGFpbiBldmVudHMgY29udGFpbiBwYXJ0aWN1bGFyIGZsYWdzLiBUaGlz IGV4YW1wbGUgYWxzbyBzaG93cyBhIGNvbXBsZXRlbHkgdXNlbGVzcyBtYW5uZXIgb2YgZW1w bG95aW5nIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9ub3cgLyZndDs8L2NvZGU+LjwvcD4KCjxw cmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPlRpbWUgaXM6ICZsdDt0eHA6 c21kX2NhbF9ub3cgZm9ybWF0PSZxdW90OyVUJnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6c21kX2Nh bGVuZGFyIGZvcm09JnF1b3Q7ZXZmb3JtJnF1b3Q7CiAgICAgc3RlcGZpZWxkPSZxdW90O2N1 c3RvbV8zJnF1b3Q7IHNraXBmaWVsZD0mcXVvdDtjdXN0b21fNiZxdW90OwogICAgIHNwYW5m b3JtPSZxdW90O211bHRpcyZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+SW4gZm9y bSA8Y29kZT5ldmZvcm08L2NvZGU+OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBj bGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O3JlY3VyJnF1b3Q7 Jmd0OwogICZsdDt0eHA6cGVybWxpbmsmZ3Q7KFJFQ1VSKSZsdDsvdHhwOnBlcm1saW5rJmd0 OwombHQ7dHhwOmVsc2UgLyZndDsKICAgJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRp dGxlIC8mZ3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7CiAgICZsdDt0eHA6c21kX2lmX2NhbCBm bGFnPSZxdW90O211bHRpZmlyc3QmcXVvdDsmZ3Q7CiAgICAgICZsdDtzcGFuIGNsYXNzPSZx dW90O3JpZ2h0JnF1b3Q7Jmd0OyZhbXA7bGFxdW87LS0mbHQ7L3NwYW4mZ3Q7CiAgICZsdDsv dHhwOnNtZF9pZl9jYWwmZ3Q7CiAgICZsdDt0eHA6c21kX2lmX2NhbCBmbGFnPSZxdW90O3Jl Y3VyZmlyc3QmcXVvdDsmZ3Q7CiAgICAgICZsdDtzcGFuJmd0O09uZSBvZiBtYW55Li4uJmx0 Oy9zcGFuJmd0OwogICAmbHQ7L3R4cDpzbWRfaWZfY2FsJmd0OwombHQ7L3R4cDpzbWRfaWZf Y2FsJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+QW5kIGluIGZvcm0gPGNvZGU+bXVsdGlzPC9j b2RlPjo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7 dHhwOnNtZF9pZl9jYWwgZmxhZz0mcXVvdDttdWx0aSwgbXVsdGlwcmV2JnF1b3Q7Jmd0Owog ICAmbHQ7dHhwOnBlcm1saW5rJmd0Oy0tJmFtcDtyYXF1bzstLSZsdDsvdHhwOnBlcm1saW5r Jmd0OwombHQ7L3R4cDpzbWRfaWZfY2FsJmd0OwombHQ7dHhwOnNtZF9pZl9jYWwgZmxhZz0m cXVvdDttdWx0aWxhc3QmcXVvdDsmZ3Q7CiAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7CiAgICAg ICZsdDtzcGFuIGNsYXNzPSZxdW90O2xlZnQmcXVvdDsmZ3Q7LS0mYW1wO3JhcXVvOyZsdDsv c3BhbiZndDsgRU5EICZsdDt0eHA6dGl0bGUgLyZndDsKICAgJmx0Oy90eHA6cGVybWxpbmsm Z3Q7CiZsdDsvdHhwOnNtZF9pZl9jYWwmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5Ob3RpY2Ug dGhhdCA8Y29kZT5tdWx0aWZpcnN0PC9jb2RlPiBpcyB0ZXN0ZWQgaW5zaWRlIHRoZSBzYW1l IGZvcm0gYXMgc3RhbmRhcmQgZXZlbnRzLiBUaGlzIGlzIGJlY2F1c2Ugb25seSA8ZW0+Y29u dGludWF0aW9uIHNwYW5uZWQgY2VsbHM8L2VtPiBhcmUgcGFzc2VkIHRvIHRoZSA8Y29kZT5z cGFuZm9ybTwvY29kZT47IHRoZSBmaXJzdCBldmVudCBvZiBhIHNwYW5uZWQgZ3JvdXAgaXMg anVzdCBsaWtlIGFueSBzdGFuZGFyZCBldmVudC4gU2ltaWxhcmx5LCBpZiB5b3UgaGFkIGJl ZW4gdXNpbmcgPGNvZGU+cmVjdXJmb3JtPC9jb2RlPiB0aGUgZmlyc3QgZXZlbnQgb2YgdGhl IHJlY3VycmluZyBzZXQgd291bGQgYmUgcHJvY2Vzc2VkIGluIHRoZSB1c3VhbCBmb3JtL2Nv bnRhaW5lciBhbmQgZXZlcnkgc3Vic2VxdWVudCBldmVudCB3b3VsZCBiZSBwYXNzZWQgdG8g dGhlIGRlZGljYXRlZCBmb3JtLjwvcD4KCgk8aDMgaWQ9ImVnMyI+RXhhbXBsZSAzOiBjbGFz c2VzPC9oMz4KCgk8cD5Zb3UgY291bGQgdXNlIHRoZSBjYWxlbmRhciB0YWdzIHRvIG91dHB1 dCB2YXJpb3VzIHBpZWNlcyBvZiBmbGFnIGluZm9ybWF0aW9uIHRvIGJ1aWxkIHlvdXIgb3du IGNsYXNzIG5hbWVzLiBUaGlzIGV4YW1wbGUgYWxzbyBkZW1vbnN0cmF0ZXMgdGhlIDxjb2Rl Pmh0bWw8L2NvZGU+IGF0dHJpYnV0ZSBvZiA8Y29kZT4mbHQ7dHhwOnNtZF9jYWxfaW5mbyAv Jmd0OzwvY29kZT4gdG8gYnVpbGQgdXAgYSBxdWVyeSBzdHJpbmcgdGhhdCBpcyBwYXNzZWQg YWxvbmcgd2l0aCBhbiBldmVudCYjODIxNztzIDxjb2RlPmNhdGVnb3J5MTwvY29kZT4gd2hl biBhIHZpc2l0b3IgY2xpY2tzIHRoZSBhbmNob3IuPC9wPgoKCTxwPlRoaXMgYWxsb3dzIHlv dXIgc2l0ZSB2aXNpdG9ycyB0byBmaWx0ZXIgZXZlbnRzIGJ5IGNhdGVnb3J5IHdoaWxlIHJl dGFpbmluZyB0aGUgYWJpbGl0eSB0byBzaG93IHRoZSBjYWxlbmRhciBmb3IgdGhlIGN1cnJl bnQgbW9udGgveWVhciBhbmQgc2VjdGlvbiB0aGV5IGFyZSB2aWV3aW5nIGluc3RlYWQgb2Yg ZHJvcHBpbmcgYmFjayB0byB0aGUgY3VycmVudCBtb250aC95ZWFyIGxpa2Ugb3RoZXIgY2Fs ZW5kYXIgc3lzdGVtcyBvZnRlbiBkby48L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUg Y2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9jYWxlbmRhciBpc293ZWVrcz0mcXVvdDtXRUVL IyZxdW90OwogICAgIHllYXJ3aWR0aD0mcXVvdDswLDImcXVvdDsgc2VsZWN0PSZxdW90O3ll YXIsIG1vbnRoJnF1b3Q7CiAgICAgc3RlcGZpZWxkPSZxdW90O2N1c3RvbV8xJnF1b3Q7IHNr aXBmaWVsZD0mcXVvdDtjdXN0b21fMiZxdW90OwogICAgIHNob3dza2lwcGVkPSZxdW90OzEm cXVvdDsgZXhwaXJlZD0mcXVvdDsxJnF1b3Q7Jmd0OwogICAmbHQ7c3BhbiBjbGFzcz0mcXVv dDsmbHQ7dHhwOnNtZF9jYWxfaW5mbyBqb2luPSZxdW90OyBjYWxfJnF1b3Q7IC8mZ3Q7JnF1 b3Q7Jmd0OwogICAgICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsm bHQ7L3R4cDpwZXJtbGluayZndDsKICAgICAgJmx0O2EgaHJlZj0mcXVvdDs/Yz0mbHQ7dHhw OmNhdGVnb3J5MQogICAgICAgICAvJmd0OyZhbXA7Jmx0O3R4cDpzbWRfY2FsX2luZm8gdHlw ZT0mcXVvdDtzLCB5ZWFyLAogICAgICAgICBtb250aCwgY2FsaWQmcXVvdDsgaHRtbD0mcXVv dDsxJnF1b3Q7IGpvaW5fcHJlZml4PSZxdW90OyZxdW90OwogICAgICAgICAvJmd0OyZxdW90 OyZndDsmbHQ7dHhwOmNhdGVnb3J5MSB0aXRsZT0mcXVvdDsxJnF1b3Q7IC8mZ3Q7Jmx0Oy9h Jmd0OwogICAmbHQ7L3NwYW4mZ3Q7CiZsdDsvdHhwOnNtZF9jYWxlbmRhciZndDsKPC9jb2Rl PjwvcHJlPgoKCTxwPldoYXQgaXMgYWxzbyB1c2VmdWwgYWJvdXQgdGhlIDxjb2RlPiZsdDt0 eHA6c21kX2NhbF9pbmZvIC8mZ3Q7PC9jb2RlPiB0YWcgaXMgdGhhdCBpZiBhIHBhcnRpY3Vs YXIgdmFsdWUgaXMgbm90IHNldCBpdCB3aWxsIDxlbT5ub3Q8L2VtPiBiZSBpbmNsdWRlZCBp biB0aGUgb3V0cHV0LjwvcD4KCgk8aDMgaWQ9ImVnNCI+RXhhbXBsZSA0OiB1cGNvbWluZyBl dmVudHM8L2gzPgoKCTxwPkxpc3QgdGhlIG5leHQgNSB1cGNvbWluZyAmIzgyMTI7IHJlY3Vy cmluZyAmIzgyMTI7IGV2ZW50cywgcGx1cyBhbnkgc3RhbmRhcmQgYW5kIHNwYW5uZWQgZXZl bnRzLCBmb3JtYXR0aW5nIHRoZW0gYXMgYSBkZWZpbml0aW9uIGxpc3QuPC9wPgoKPHByZSBj bGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O2gyJmd0O1VwY29taW5nIEV2 ZW50cyZsdDsvaDImZ3Q7CiZsdDt0eHA6c21kX2FydGljbGVfZXZlbnQgc3RlcGZpZWxkPSZx dW90O2N1c3RvbV8xJnF1b3Q7CiAgICAgd3JhcHRhZz0mcXVvdDtkbCZxdW90OyB0aW1lPSZx dW90O2Z1dHVyZSZxdW90OyBldmVudGxpbWl0PSZxdW90OzUmcXVvdDsmZ3Q7CiAgICZsdDt0 eHA6aWZfZGlmZmVyZW50Jmd0OwogICAgICZsdDtkdCZndDsmbHQ7dHhwOnBvc3RlZCBmb3Jt YXQ9JnF1b3Q7JUIgJVkmcXVvdDsgLyZndDsmbHQ7L2R0Jmd0OwogICAmbHQ7L3R4cDppZl9k aWZmZXJlbnQmZ3Q7CiAgICZsdDtkZCZndDsKICAgICAgJmx0O3R4cDpwZXJtbGluayZndDsm bHQ7dHhwOnRpdGxlLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgICAgJmx0O3R4cDpw b3N0ZWQgLyZndDsKICAgJmx0Oy9kZCZndDsKJmx0Oy90eHA6c21kX2FydGljbGVfZXZlbnQm Z3Q7CjwvY29kZT48L3ByZT4KCgk8cD5JZiB5b3UgYWRkIHBhZ2luYXRpb24gdGFncyB5b3Ug Y2FuIGZsaXAgdGhyb3VnaCBhbGwgdGhlIGV2ZW50czsgdGhleSB3aWxsIGJlIGRpc3BsYXll ZCAxMCBhdCBhIHRpbWUgb24gZWFjaCBwYWdlIChpZiB5b3Ugd2FudCB0byBrZWVwIHRyYWNr IG9mIHdoaWNoIHBhZ2UgeW91IGFyZSBvbiBhcyB5b3UgZmxpcCB0aHJvdWdoIGEgY2FsZW5k YXIgdGhhdCBpcyBpbiBhIHNpZGViYXIsIGFkZCA8Y29kZT5wZzwvY29kZT4gdG8gdGhlIDxj b2RlPm1haW50YWluPC9jb2RlPiBhdHRyaWJ1dGUgaW4geW91ciBjYWxlbmRhcikuPC9wPgoK CTxwPk5vdGUgdGhlIGh5cGVybGlua2VkIHRpdGxlIHNob3duIGhlcmUgd2lsbCBqdW1wIHRv IHRoZSAmIzgyMTY7cmVhbCYjODIxNzsgYXJ0aWNsZSAodGhlIGZpcnN0IGRhdGUgaW4gdGhl IHJlY3VycmluZyBzZXQpIHdoZW4gY2xpY2tlZCwgbm90IHRvIGFuIGFydGljbGUgd2l0aCBh IGRhdGUgbWF0Y2hpbmcgdGhlIHJlY3VycmVuY2UuPC9wPgoKCTxwPklmIHlvdSB3YW50ZWQg dG8gYWxsb3cgcGVvcGxlIHRvIGJvb2sgYW4gZXZlbnQsIHRyeSB0aGlzIGluIHlvdXIgaHlw ZXJsaW5rZWQgaW5kaXZpZHVhbCBhcnRpY2xlOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48 Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6aWZfaW5kaXZpZHVhbF9hcnRpY2xlJmd0Owog Jmx0O3R4cDphcnRpY2xlIGxpbWl0PSZxdW90OzEmcXVvdDsmZ3Q7CiAgJmx0O2gzJmd0OyZs dDt0eHA6dGl0bGUgLyZndDsmbHQ7L2gzJmd0OwogICZsdDt0eHA6Ym9keSAvJmd0OwogICZs dDtwJmd0O1BsZWFzZSBjaG9vc2UgYSBkYXRlIHRvIGJvb2s6Jmx0Oy9wJmd0OwogICZsdDtz ZWxlY3QmZ3Q7CiAgJmx0O3R4cDpzbWRfYXJ0aWNsZV9ldmVudCBzdGVwZmllbGQ9JnF1b3Q7 Y3VzdG9tXzEmcXVvdDsKICAgIHR5cGU9JnF1b3Q7cmVjdXImcXVvdDsgaWQ9JiMzOTsmbHQ7 dHhwOmFydGljbGVfaWQgLyZndDsmIzM5OyZndDsKICAgICZsdDtvcHRpb24KICAgICB2YWx1 ZT0mIzM5OyZsdDt0eHA6cG9zdGVkIGZvcm1hdD0mcXVvdDslRy0lbS0lZCZxdW90Oy8mZ3Q7 JiMzOTsmZ3Q7CiAgICAgICZsdDt0eHA6cG9zdGVkIGZvcm1hdD0mcXVvdDslbSAlZCwgJEcm cXVvdDsgLyZndDsKICAgICZsdDsvb3B0aW9uJmd0OwogICZsdDsvdHhwOnNtZF9hcnRpY2xl X2V2ZW50Jmd0OwogICZsdDsvc2VsZWN0Jmd0OwogJmx0Oy90eHA6YXJ0aWNsZSZndDsKJmx0 Oy90eHA6aWZfaW5kaXZpZHVhbF9hcnRpY2xlJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+V2l0 aCBzb21lIGN1bm5pbmcgeW91IGNvdWxkIGV2ZW4gYWRkIHRoZSAmIzgyMTY7dmlydHVhbCYj ODIxNzsgZGF0ZSB0aGF0IHRoZXkgY2hvc2UgaW4geW91ciBvcmlnaW5hbCBzbWRfYXJ0aWNs ZV9ldmVudCBsaXN0IGFuZCBwYXNzIGl0IGFzIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj4gdmFyaWFibGUgdG8geW91ciBpbmRpdmlkdWFsIGFydGljbGUgd2hlcmUgeW91IGNv dWxkIHJlYWQgdGhlIHZhbHVlIGFuZCBwcmUtc2VsZWN0IHRoZSBkYXRlIGluIHRoZSBzZWxl Y3QgbGlzdCBmb3IgdGhlIHZpc3Rvci48L3A+CgoJPGgzIGlkPSJlZzUiPkV4YW1wbGUgNTog aUNhbCBzeW5jaHJvbmlzYXRpb248L2gzPgoKCTxwPkhvdyBhYm91dCBiZWluZyBhYmxlIHRv IG91dHB1dCB5b3VyIGV2ZW50cyBpbiBpQ2FsIGZvcm1hdCBzbyBvdGhlciBwZW9wbGUgY2Fu IHN5bmMgdGhlaXIgY2FsZW5kYXJzIHRvIHlvdXJzPyBQdXQgdGhpcyBpbiBhIG5ldyBQYWdl IHRlbXBsYXRlIGluIGl0cyBvd24gU2VjdGlvbjo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+ PGNvZGUgY2xhc3M9ImJsb2NrIj5CRUdJTjpWQ0FMRU5EQVIKVkVSU0lPTjoyLjAKWC1XUi1D QUxOQU1FOkdpZ3MgQ2FsZW5kYXIKUFJPRElEOi0vL0FwcGxlIENvbXB1dGVyLCBJbmMvL2lD YWwgMS41Ly9FTgpYLVdSLVRJTUVaT05FOkV1cm9wZS9Mb25kb24KJmx0O3R4cDpzbWRfYXJ0 aWNsZV9ldmVudCBmb3JtPSZxdW90O2ljc2l0ZW0mcXVvdDsgdGltZT0mcXVvdDthbnkmcXVv dDsKc2VjdGlvbj0mcXVvdDtnaWdzJnF1b3Q7IGxpbWl0PSZxdW90OzEwMDAmcXVvdDsmZ3Q7 CiBCRUdJTjpWRVZFTlQKIERUU1RBUlQ6Jmx0O3R4cDpwb3N0ZWQgZm9ybWF0PSZxdW90OyVZ JW0lZFQlSCVpJXMmcXVvdDsgLyZndDsKIERURU5EOiZsdDt0eHA6ZXhwaXJlcyBmb3JtYXQ9 JnF1b3Q7JVklbSVkVCVIJWklcyZxdW90OyAvJmd0OwogU1VNTUFSWTombHQ7dHhwOnRpdGxl IC8mZ3Q7CiBFTkQ6VkVWRU5UCiZsdDsvdHhwOnNtZF9hcnRpY2xlX2V2ZW50Jmd0OwpFTkQ6 VkNBTEVOREFSCjwvY29kZT48L3ByZT4KCgk8cD5UaGF0IHdpbGwgb3V0cHV0IGFuIGlDYWwt Zm9ybWF0dGVkIGdpZyBsaXN0IChyZXBlYXRlZCBvciBvdGhlcndpc2UpLiBJZiB5b3UgZ290 IGZyZWFreSB3aXRoIGl0IGFuZCBhZGRlZCBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGluc2lk ZSB0aGUgdGVtcGxhdGUgeW91IGNvdWxkIGV2ZW4gcmVhZCBpbiA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPiB2YXJpYWJsZXMgYW5kIHBsdWcgdGhlbSBpbi4gVGh1cyB5b3UgY291 bGQgbGluayB0byBpdCBkaXJlY3RseSBvZmYgdGhlIGNhbGVuZGFyIGl0c2VsZiwgcGFzcyBp biB0aGUgc2VjdGlvbiwgY2F0ZWdvcnkgb3IgZXZlbnQgaW5mbyBhbmQgaGF2ZSBhIGN1c3Rv bWlzZWQgaUNhbCBzdHJlYW0gcHVtcGVkIG91dCBvZiBUZXh0cGF0dGVybi48L3A+CgoJPHA+ VGhhbmtzIHRvIHdvb2YgZm9yIGJyaW5naW5nIHRoZSBvcmlnaW5hbCA8YSBocmVmPSJodHRw Oi8vZGUtb25saW5lLmNvLnVrLzIwMDYvMDUvMDUvdGV4dHBhdHRlcm4tYW5kLWljYWwiPkRh dmlkIEVtZXJ5PC9hPiBhcnRpY2xlIHRvIG15IGF0dGVudGlvbi48L3A+CgoJPGgzIGlkPSJl ZzYiPkV4YW1wbGUgNjogcmVkZWZpbmluZyBub3c8L2gzPgoKCTxwPlVzaW5nIHRoZSA8Y29k ZT5ub3c8L2NvZGU+IGFuZCA8Y29kZT5vZmZzZXQ8L2NvZGU+IGF0dHJpYnV0ZXMgb2YgPGNv ZGU+Jmx0O3R4cDpzbWRfY2FsX25vdyAvJmd0OzwvY29kZT4geW91IGNhbiBlZmZlY3RpdmVs eSBzZXQgJiM4MjE2O25vdyYjODIxNzsgdG8gYmUgYW55IHRpbWUgeW91IGxpa2UgYW5kIG1h a2UgY2FsY3VsYXRpb25zIGJhc2VkIG9uIGEgcGFydGljdWxhciBkYXRlLjwvcD4KCgk8cD5Q bHVnZ2luZyB0aGUgPGNvZGU+P21vbnRoPC9jb2RlPiBhbmQgPGNvZGU+P3llYXI8L2NvZGU+ IGNvZGVzIGluIGFsbG93cyB5b3UgdG8gbWFrZSA8Y29kZT4mbHQ7dHhwOnNtZF9hcnRpY2xl X2V2ZW50IC8mZ3Q7PC9jb2RlPiB0cmFjayB0aGUgY2FsZW5kYXIuIFNvIHlvdSBjYW4gYXV0 b21hdGljYWxseSBzaG93IG9ubHkgdGhlIGV2ZW50cyB0aGF0IG9jY3VyIGluIHRoZSBtb250 aCB0aGUgdmlzaXRvciBpcyBicm93c2luZyB2aWEgdGhlIGNhbGVuZGFyOjwvcD4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX2NhbGVuZGFy IHN0ZXBmaWVsZD0mcXVvdDtjdXN0b21fMSZxdW90OyAvJmd0OwombHQ7aDImZ3Q7RXZlbnRz IHRoaXMgbW9udGgmbHQ7L2gyJmd0OwombHQ7dHhwOnNtZF9hcnRpY2xlX2V2ZW50IHN0ZXBm aWVsZD0mcXVvdDtjdXN0b21fMSZxdW90OwogICAgIGZyb209JiMzOTsmbHQ7dHhwOnNtZF9j YWxfbm93IG5vdz0mcXVvdDswMS0/bW9udGgtP3llYXImcXVvdDsgLyZndDsmIzM5OwogICAg IHRvPSYjMzk7Jmx0O3R4cDpzbWRfY2FsX25vdyBub3c9JnF1b3Q7P21vbnRoLT95ZWFyJnF1 b3Q7CiAgICAgICAgb2Zmc2V0PSZxdW90OzEgbW9udGgmcXVvdDsgLyZndDsmIzM5OyB0aW1l PSZxdW90O2FueSZxdW90OyB3cmFwdGFnPSZxdW90O3VsJnF1b3Q7Jmd0OwombHQ7bGkmZ3Q7 Jmx0O3R4cDpwZXJtbGluayZndDsmbHQ7YiZndDsmbHQ7dHhwOnRpdGxlLyZndDsmbHQ7L2Im Z3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7Jmx0Oy9saSZndDsKJmx0Oy90eHA6c21kX2FydGlj bGVfZXZlbnQmZ3Q7CjwvY29kZT48L3ByZT4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVH SU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGlu ZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9u dDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dy b3VuZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9j ayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxh eTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9o ZWxwIGgxIHsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRl eHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHgg c29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fu cy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMt c2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7IHRleHQtZGVj b3JhdGlvbjp1bmRlcmxpbmU7IH0KI3NtZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFy aWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAw OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQt d2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3Jk ZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7IHdpZHRoOjkwJTsgdGV4 dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTsgYm9yZGVyLWNvbGxhcHNlOmNv bGxhcHNlOyB9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRoIHsgYm9yZGVyOjFweCBzb2xp ZCAjOTk5OyBwYWRkaW5nOi41ZW07IH0KI3NtZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBl OnNxdWFyZTsgfQojc21kX2hlbHAgLmltcG9ydGFudCB7IGNvbG9yOnJlZDsgfQojc21kX2hl bHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7 IG1hcmdpbi10b3A6NXB4OyB9CiNzbWRfaGVscCBkbCBkZCB7IG1hcmdpbjoycHggMTVweDsg fQojc21kX2hlbHAgZGwgZGQ6YmVmb3JlIHsgY29udGVudDogIlwyMWQyXDAwYTAiOyB9CiNz bWRfaGVscCBkbCBkZCBkbCB7IHBhZGRpbmc6IDAgMTVweDsgfQo8L3N0eWxlPgo8IS0tICoq KiBFTkQgUExVR0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6ImE5ODk1M2QyN2M4 OTY2NDBlYzZhZjBkOWY4MmQyY2E2Ijt9