# Name: smd_prognostics v0.10 # Type: Admin/Public side plugin # Pro-active diagnostics that alarm when things have changed in TXP # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 1 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzbWRfcHJvZ25vc3RpY3MiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTAiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjY1OiJQcm8tYWN0aXZlIGRpYWdub3N0aWNzIHRoYXQgYWxhcm0gd2hlbiB0aGluZ3Mg aGF2ZSBjaGFuZ2VkIGluIFRYUCI7czo0OiJjb2RlIjtzOjU3NTQzOiJnbG9iYWwgJHNtZF9w cm9nbm9zdGljc19jaGVja3N1bXMsICRzbWRfcHJvZ25vc3RpY3Nfc3FscHJvdDsNCiRzbWRf cHJvZ25vc3RpY3NfY2hlY2tzdW1zID0gcnRyaW0oZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19kaXInLCB0eHBhdGgsIDEpLCBEUykgLiBEUyAuIGdldF9wcmVmKCdzbWRfcHJvZ25vc3Rp Y3NfcHJlZml4JywgJycpLidzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLnR4dCc7DQokaGRy b24gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzJywgJycpOw0KJHNt ZF9wcm9nbm9zdGljc19zcWxwcm90ID0gbmV3IHNtZF9wcm9nX1BoUHJvdGVjdG9yKGZhbHNl KTsNCg0KaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWdsb2JhbCAkc21kX3By b2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3N0eWxlLCAkdHhwX3VzZXI7DQoN Cgkkc21kX3Byb2dub3N0aWNzX2V2ZW50ID0gJ3NtZF9wcm9nbm9zdGljcyc7DQoJJHNtZF9w cm9nbm9zdGljc19wcml2cyA9ICcxLDInOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3Mg PSBncHMoJ3NtZF9wcm9nbm9zdGljc19zdXBwcmVzcycpOw0KCSRzbWRfcHJvZ25vc3RpY3Nf c3R5bGUgPSBhcnJheSgNCgkJJ21zZycgPT4NCiAgICAgICAgICcuc21kX3Byb2dfd2FybiB7 IG1hcmdpbjowIGF1dG8gMTBweDsgd2lkdGg6NTAwcHg7IGJhY2tncm91bmQ6I2ZmYzsgYm9y ZGVyOjJweCBkYXNoZWQgcmVkOyBwYWRkaW5nOjEwcHg7IGNvbG9yOiM0NDQ7IH0NCiAgICAg ICAgICAuc21kX3Byb2dfd2FybiBhIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6Izk2Mzsg fQ0KICAgICAgICAgIC5zbWRfcHJvZ193YXJuIHNwYW4geyBmb250LXdlaWdodDpib2xkOyB9 DQogICAgICAgICAgLnNtZF9wcm9nX3dhcm4gZGl2IHsgZm9udC13ZWlnaHQ6Ym9sZDsgcGFk ZGluZy1ib3R0b206MTBweDsgfScsDQoJCSdzZXR1cCcgPT4NCiAgICAgICAgICcuc21kX2xh YmVsIHsgdGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnQ7IHZlcnRpY2FsLWFsaWduOm1pZGRs ZTsgfQ0KICAgICAgICAgIC5zbWRfcHJvZ19idG5zIGZvcm0geyBkaXNwbGF5OmlubGluZTsg fQ0KICAgICAgICAgIC5zbWRfcHJvZ25vc3RpY3Nfc2V0dXAgaDMgeyBtYXJnaW46MjVweCAw IDA7IH0nLA0KCQknbWV0ZXInID0+DQogICAgICAgICAnI3NtZF9wcm9nX21ldGVyIHsgbWFy Z2luOjAgYXV0bzsgYm9yZGVyOjFweCBzb2xpZCAjY2NjOyB3aWR0aDozNjBweDsgcGFkZGlu Zzo1cHg7IGZvbnQtc2l6ZToxMjAlOyB9DQogICAgICAgICAgLnNtZF9wcm9nX3Bhc3Nfc3Ry ZW5ndGggeyBjb2xvcjpncmVlbjsgZm9udC13ZWlnaHQ6Ym9sZDsgfScsDQoJCSdhZHZpY2Un ID0+DQogICAgICAgICAnLnNtZF9wcm9nX2FkdmljZSB7IHdpZHRoOjc1MHB4OyB9DQogICAg ICAgICAgI2xpc3Quc21kX3Byb2dfYWR2aWNlIHRkIHsgcGFkZGluZzo1cHg7IH0NCiAgICAg ICAgICAuc21kX3Byb2dfYnRucyB7IHdpZHRoOjE0MHB4OyB9JywNCgkpOw0KDQoJYWRkX3By aXZzKCRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3NfcHJpdnMpOw0K CWFkZF9wcml2cygncGx1Z2luX3ByZWZzLicuJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNt ZF9wcm9nbm9zdGljc19wcml2cyk7DQoJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJHNt ZF9wcm9nbm9zdGljc19ldmVudCwgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9z dGljcycpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzX3NldHVwJywg J3BsdWdpbl9wcmVmcy4nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfcHJvZ25vc3RpY3NfZGlzcGF0Y2hlcicsICRzbWRfcHJvZ25vc3RpY3Nf ZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfcHJvZ25vc3RpY3NfY2hyb25vc3Ry ZW5ndGgnLCAnYWRtaW5fc2lkZScsICdoZWFkX2VuZCcpOw0KCWlmICgkaGRyb24pIHsNCgkJ cmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19yZXF1ZXN0X2hlYWRlcnMnLCAn YWRtaW5fc2lkZScsICdoZWFkX2VuZCcpOw0KCX0NCglpZiAoc3RycG9zKGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCcsICcnKSwgJ2FkbWluJykgIT09IGZhbHNlKSB7 DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCcsICdh ZG1pbl9zaWRlJywgJ2hlYWRfZW5kJyk7DQoJfQ0KDQoJJHByaXZzID0gc2FmZV9maWVsZCgi cHJpdnMiLCAidHhwX3VzZXJzIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCR0eHBfdXNlcikuIici KTsNCg0KCS8vIEFkbWluIHNpZGUgY2FsbGJhY2sNCglpZiAoISRzbWRfcHJvZ25vc3RpY3Nf c3VwcHJlc3MgJiYgaW5fYXJyYXkoJHByaXZzLCBkb19saXN0KCRzbWRfcHJvZ25vc3RpY3Nf cHJpdnMpKSkgew0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzJywgJ2Fk bWluX3NpZGUnLCAncGFnZXRvcF9lbmQnKTsNCgl9DQp9DQoNCi8vIFB1YmxpYyBzaWRlIGNh bGxiYWNrcw0KaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX3do ZXJlJywgJycpLCAncHVibGljJykgIT09IGZhbHNlKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2so J3NtZF9wcm9nbm9zdGljcycsICdwcmV0ZXh0Jyk7DQp9DQppZiAoJGhkcm9uKSB7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19yZXF1ZXN0X2hlYWRlcnMnLCAncHJl dGV4dCcpOw0KfQ0KaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3NxbF9p bmplY3QnLCAnJyksICdwdWJsaWMnKSAhPT0gZmFsc2UpIHsNCglyZWdpc3Rlcl9jYWxsYmFj aygnc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLCAncHJldGV4dCcpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19kaXNw YXRjaGVyKCRldnQsICRzdHApIHsNCglpZighJHN0cCBvciAhaW5fYXJyYXkoJHN0cCwgYXJy YXkoDQoJCQknc21kX3Byb2dub3N0aWNzX2ZpbGVzJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nf c2V0dXAnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19hZHZpY2UnLA0KCQkJJ3NtZF9wcm9nbm9z dGljc19hY2snLA0KCQkpKSkgew0KCQlzbWRfcHJvZ25vc3RpY3Nfc2V0dXAoJycpOw0KCX0g ZWxzZSAkc3RwKCk7DQp9DQoNCi8vIFN0dWIgdG8gY2FsbCB0aGUgdmVyaWZpY2F0aW9uIGNv ZGUgZnJvbSB0aGUgVVJMDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3MoJGV2dCwgJHN0cCkg ew0KCXJldHVybiBzbWRfZG9fcHJvZ25vc3RpY3MoKTsNCn0NCg0KLy8gVmVyaWZ5IHRoZSBm aWxlIGNoZWNrc3Vtcw0KLy8gJG1vZGUgPSAwOiBub3JtYWwgLyAxOiBubyB1cGRhdGUgKHJl dHVybiBhcnJheXMgb25seSkgLyAyOiBzaWxlbnQgdXBkYXRlDQpmdW5jdGlvbiBzbWRfZG9f cHJvZ25vc3RpY3MoJG1vZGU9MCkgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50 LCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcywgJHNtZF9wcm9nbm9zdGljc19zdHlsZTsN Cg0KCSRub3cgPSB0aW1lKCk7DQoJJG5vayA9ICRtaXNzID0gJGFkZGVkID0gJGFsbGZpbGVz ID0gJGhhc2hkb3duID0gJGhhc2htb2QgPSBhcnJheSgpOw0KCSR0ZGlmZiA9ICgkbW9kZT09 MSB8fCAoJG5vdyAtIGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGNoZWNrJywgMCkg PiBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEnLCAzNjAwKSkpID8gdHJ1 ZSA6IGZhbHNlOw0KCSRzdW1oYXNoID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zdW1o YXNoJywgTlVMTCwgKCRtb2RlPT0xID8gMSA6IDApKTsNCg0KCSRsb29rYXQgPSBnZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcicsICcnKTsNCgkkYWRkcyA9IChzdHJwb3Mo JGxvb2thdCwgJ2FkZCcpICE9PSBmYWxzZSk7DQoJJGRlbHMgPSAoc3RycG9zKCRsb29rYXQs ICdkZWxldGUnKSAhPT0gZmFsc2UpOw0KCSRtb2RzID0gKHN0cnBvcygkbG9va2F0LCAnbW9k aWZ5JykgIT09IGZhbHNlKTsNCg0KCS8vIFBhcnRzIHNoYW1lbGVzc2x5IHBsYWdpYXJpc2Vk IGZyb20gdHhwX2RpYWcNCglpZiAoJHRkaWZmKSB7DQoJCWlmICgkY3MgPSBAZmlsZSgkc21k X3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJCSRoYXNoID0gbWQ1KHNtZF9wcm9nbm9z dGljc19wcmVwX2ZpbGUoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKTsNCgkJCWlmICgk aGFzaCAhPSAkc3VtaGFzaCkgew0KCQkJCSRoYXNobW9kW10gPSAkc21kX3Byb2dub3N0aWNz X2NoZWNrc3VtczsNCgkJCX0gZWxzZSB7DQoJCQkJZm9yZWFjaCAoJGNzIGFzICRjKSB7DQoJ CQkJCWlmIChwcmVnX21hdGNoKCdAXihcUyspOiBcKCguKilcKSRAJywgdHJpbSgkYyksICRt KSkgew0KCQkJCQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQkJCWlmICgkZGVscyAm JiAhZmlsZV9leGlzdHMoJGZpbGUpKSB7DQoJCQkJCQkJJG1pc3NbXSA9ICRmaWxlOw0KCQkJ CQkJfSBlbHNlIGlmICgkbW9kcyAmJiAkbWQ1ICE9ICdOVUxMJykgew0KCQkJCQkJCWlmIChm aWxlX2V4aXN0cygkZmlsZSkpIHsNCgkJCQkJCQkJJGNvbnRlbnQgPSBzbWRfcHJvZ25vc3Rp Y3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCQkJCQkJaWYgKChtZDUoJGNvbnRlbnQpICE9ICRt ZDUpICYmICgkZmlsZSAhPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJCQkJ CQkJCSRub2tbXSA9ICRmaWxlOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJ CQkJJGFsbGZpbGVzW10gPSAkZmlsZTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmICgkYWRk cykgew0KCQkJCQkkZmlsZWxpc3QgPSBzbWRfcHJvZ25vc3RpY3NfcmVhZGZpbGVzKCk7DQoJ CQkJCSRhZGRlZCA9IGFycmF5X2RpZmYoJGZpbGVsaXN0LCAkYWxsZmlsZXMpOw0KCQkJCX0N Cg0KCQkJCWlmICgkbW9kZSAhPSAxKSB7DQoJCQkJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3Rp Y3NfbGFzdGNoZWNrJywgJG5vdywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0 X2lucHV0Jyk7DQoJCQkJfQ0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJLy8gRmlsZSBkb2Vzbid0 IGV4aXN0DQoJCQkkaGFzaGRvd25bXSA9ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0K CQl9DQoJfQ0KDQoJLy8gQXNzZW1ibGUgbWVzc2FnZQ0KCWlmICgkbm9rIHx8ICRtaXNzIHx8 ICRhZGRlZCB8fCAkaGFzaGRvd24gfHwgJGhhc2htb2QpIHsNCgkJaWYgKCRtb2RlPT0xKSB7 DQoJCQlyZXR1cm4gYXJyYXkoJG5vaywgJG1pc3MsICRhZGRlZCwgJGhhc2hkb3duLCAkaGFz aG1vZCk7DQoJCX0gZWxzZSB7DQoJCQkkdmlhID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19ub3RpZnlfdmlhJywgJycpOw0KCQkJJGRldGVjdCA9IGdldF9wcmVmKCdzbWRfcHJvZ25v c3RpY3NfbGFzdGRldGVjdCcsICcnKTsNCgkJCSRsYXN0cyA9IGV4cGxvZGUoJywnLCBnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RhY3QnLCAwKSk7DQoJCQkkZnJlcXMgPSBleHBs b2RlKCcsJywgZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19hbGFybV9mcmVxJywgODY0MDAp KTsNCgkJCWlmICghaXNzZXQoJGxhc3RzWzFdKSkgew0KCQkJCSRsYXN0c1sxXSA9ICRsYXN0 c1swXTsNCgkJCX0NCgkJCWlmICghaXNzZXQoJGZyZXFzWzFdKSkgew0KCQkJCSRmcmVxc1sx XSA9ICRmcmVxc1swXTsNCgkJCX0NCg0KCQkJJGxhc3RhY3RfdHhwID0gKCRtb2RlIDwgMiAm JiAoJG5vdyAtICRsYXN0c1swXSA+ICRmcmVxc1swXSkpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJ JGxhc3RhY3RfbWFpbCA9ICgkbW9kZSA8IDIgJiYgKCRub3cgLSAkbGFzdHNbMV0gPiAkZnJl cXNbMV0pKSA/IHRydWUgOiBmYWxzZTsNCgkJCSRsYXN0bXNnID0gZ2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19sYXN0bXNnJywgJycpOw0KDQoJCQkkc3ViamVjdCA9IHNtZF9wcm9nbm9z dGljc19nVHh0KCdzdWJqZWN0Jyk7DQoJCQkkbXNnID0gam9pbignfCcsIGFycmF5X21lcmdl KCRoYXNoZG93biwgJGhhc2htb2QsICRub2ssICRtaXNzLCAkYWRkZWQpKTsNCg0KCQkJaWYg KEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJyAmJiBzdHJwb3MoJHZpYSwgJ3R4cCcpICE9PSBm YWxzZSkgew0KCQkJCWlmICgkbGFzdGFjdF90eHAgfHwgKCRsYXN0bXNnICE9IG1kNSgkbXNn KSkpIHsNCgkJCQkJJG91dCA9ICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicuJHNtZF9wcm9n bm9zdGljc19zdHlsZVsnbXNnJ10uJzwvc3R5bGU+PGRpdiBjbGFzcz0ic21kX3Byb2dfd2Fy biI+PGRpdj4nLiRzdWJqZWN0Lic8L2Rpdj4nLg0KCQkJCQkJKCgkaGFzaGRvd24pID8gJzxw Picuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2hhc2hkb3duJykuJzwvcD48dWw+ PGxpPicuam9pbignPC9saT48bGk+JywkaGFzaGRvd24pLic8L2xpPjwvdWw+JyA6ICcnKS4N CgkJCQkJCSgoJGhhc2htb2QpID8gJzxwPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFt YmxlX2hhc2htb2QnKS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRoYXNobW9k KS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRub2spID8gJzxwPicuc21kX3Byb2du b3N0aWNzX2dUeHQoJ3ByZWFtYmxlX25vaycpLic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+ PGxpPicsJG5vaykuJzwvbGk+PC91bD4nIDogJycpLg0KCQkJCQkJKCgkbWlzcykgPyAnPHA+ Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfbWlzcycpLic8L3A+PHVsPjxsaT4n LmpvaW4oJzwvbGk+PGxpPicsJG1pc3MpLic8L2xpPjwvdWw+JyA6ICcnKS4NCgkJCQkJCSgo JGFkZGVkKSA/ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9hZGRlZCcp Lic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+PGxpPicsJGFkZGVkKS4nPC9saT48L3VsPicg OiAnJykuDQoJCQkJCQknPHA+PGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PScuJHNtZF9wcm9n bm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19hY2smc21kX3Byb2du b3N0aWNzX3N1cHByZXNzPTEiPicuDQoJCQkJCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG9z dGFtYmxlJykuJzwvYT48L3A+PC9kaXY+JzsNCg0KCQkJCQlzZXRfcHJlZignc21kX3Byb2du b3N0aWNzX2xhc3RhY3QnLCAkbm93LicsJy4kbGFzdHNbMV0sICdzbWRfcHJvZ25vcycsIFBS RUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCQllY2hvICRvdXQ7DQoJCQkJfQ0KCQkJ fQ0KDQoJCQlpZiAoc3RycG9zKCR2aWEsICdlbWFpbCcpICE9PSBmYWxzZSkgew0KCQkJCWlm ICgkbGFzdGFjdF9tYWlsIHx8ICgkbGFzdG1zZyAhPSBtZDUoJG1zZykpKSB7DQoJCQkJCSR0 byA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvJywgJycpOw0KCQkJCQlpZiAo JHRvKSB7DQoJCQkJCQkkZG9tYWlucGFydHMgPSBkb19saXN0KGRvU3RyaXAoc2VydmVyU2V0 KCdTRVJWRVJfTkFNRScpKSwgJy4nKTsNCgkJCQkJCSRudW1wYXJ0cyA9IGNvdW50KCRkb21h aW5wYXJ0cyk7DQoJCQkJCQkkZG9tYWluID0gJGRvbWFpbnBhcnRzWyRudW1wYXJ0cy0yXSAu ICcuJyAuICRkb21haW5wYXJ0c1skbnVtcGFydHMtMV07DQoJCQkJCQkkcmVwbHlfdG8gPSAn bm9yZXBseUAnLiRkb21haW47DQoJCQkJCQkkdHhwZGlyID0gaHUudHJpbShkaXJuYW1lKCRf U0VSVkVSWydQSFBfU0VMRiddKSwgJy9cXCcpOw0KCQkJCQkJJHNlcCA9IGlzX3dpbmRvd3Mo KSA/ICJcclxuIiA6ICJcbiI7DQoJCQkJCQkkaGVhZGVycyA9ICJGcm9tOiBzbWRfcHJvZ25v c3RpY3MgPCRyZXBseV90bz4iLg0KCQkJCQkJCSRzZXAuJ1JlcGx5LVRvOiAnLiRyZXBseV90 by4NCgkJCQkJCQkkc2VwLidYLU1haWxlcjogVGV4dHBhdHRlcm4nLg0KCQkJCQkJCSRzZXAu J0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQnLg0KCQkJCQkJCSRzZXAuJ0NvbnRl bnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iVVRGLTgiJy4NCgkJCQkJCQkkc2VwOw0K CQkJCQkJJGJvZHkgPQ0KCQkJCQkJCSgoJGhhc2hkb3duKSA/IG4uc21kX3Byb2dub3N0aWNz X2dUeHQoJ3ByZWFtYmxlX2hhc2hkb3duJykubi5uLmpvaW4obiwkaGFzaGRvd24pIDogJycp Lg0KCQkJCQkJCSgoJGhhc2htb2QpID8gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1i bGVfaGFzaG1vZCcpLm4ubi5qb2luKG4sJGhhc2htb2QpIDogJycpLg0KCQkJCQkJCSgoJG5v aykgPyBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9ub2snKS5uLm4uam9pbihu LCRub2spIDogJycpLg0KCQkJCQkJCSgoJG1pc3MpID8gbi5uLnNtZF9wcm9nbm9zdGljc19n VHh0KCdwcmVhbWJsZV9taXNzJykubi5uLmpvaW4obiwkbWlzcykgOiAnJykuDQoJCQkJCQkJ KCgkYWRkZWQpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9hZGRlZCcp Lm4ubi5qb2luKG4sJGFkZGVkKSA6ICcnKS4NCgkJCQkJCQluLm4uJzxhIGhyZWY9IicuJHR4 cGRpci4nL2luZGV4LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyZzdGVw PXNtZF9wcm9nbm9zdGljc19hY2smc21kX3Byb2dub3N0aWNzX3N1cHByZXNzPTEiPicuc21k X3Byb2dub3N0aWNzX2dUeHQoJ3Bvc3RhbWJsZScpLic8L2E+JzsNCgkJCQkJCW1haWwoJHRv LCAkc3ViamVjdCwgJGJvZHksICRoZWFkZXJzKTsNCgkJCQkJfQ0KCQkJCQlzZXRfcHJlZign c21kX3Byb2dub3N0aWNzX2xhc3RhY3QnLCAkbGFzdHNbMF0uJywnLiRub3csICdzbWRfcHJv Z25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCX0NCgkJCX0NCgkJCXNl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdG1zZycsIG1kNSgkbXNnKSwgJ3NtZF9wcm9n bm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQlpZiAoJGxhc3Rtc2cgIT0g bWQ1KCRtc2cpKSB7DQoJCQkJaWYgKCRkZXRlY3QgPT0gJycpIHsNCgkJCQkJc2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19sYXN0ZGV0ZWN0JywgJG5vdywgJ3NtZF9wcm9nbm9zJywgUFJF Rl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGRldGVjdCA9 IGV4cGxvZGUoJywnLCRkZXRlY3QpOw0KCQkJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNz X2xhc3RkZXRlY3QnLCAkZGV0ZWN0WzBdLicsJy4kbm93LCAnc21kX3Byb2dub3MnLCBQUkVG X0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQoNCi8v IC0tLS0tLS0tLS0gIENhdGNoIHVuZXhwZWN0ZWQgcmVxdWVzdCBoZWFkZXJzDQpmdW5jdGlv biBzbWRfcHJvZ25vc3RpY3NfcmVxdWVzdF9oZWFkZXJzKCRldnQsICRzdHApIHsNCgkkYmxv Y2sgPSBleHBsb2RlKCd8JywgZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVy cycsICcnKSk7DQoJJGhkciA9IHNlcnZlclNldCgnUkVRVUVTVF9NRVRIT0QnKTsNCg0KCWlm IChpbl9hcnJheSgkaGRyLCAkYmxvY2spKSB7DQoJCWVjaG8gc21kX3Byb2dub3N0aWNzX2dU eHQoJ25pY2VfdHJ5X2hlYWRlcicpOw0KCQlleGl0KDEpOw0KLyoNCgkJLy8gU2VuZCB0aGUg Zm9yZW5zaWNzIG9mZg0KCQkkdG8gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX21haWx0 b19jc2knLCAnJyk7DQoJCSRzdWJqZWN0ID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N1Ympl Y3RfY3NpJyk7DQoJCSRkb21haW5wYXJ0cyA9IGRvX2xpc3QoZG9TdHJpcChzZXJ2ZXJTZXQo J1NFUlZFUl9OQU1FJykpLCAnLicpOw0KCQkkbnVtcGFydHMgPSBjb3VudCgkZG9tYWlucGFy dHMpOw0KCQkkZG9tYWluID0gJGRvbWFpbnBhcnRzWyRudW1wYXJ0cy0yXSAuICcuJyAuICRk b21haW5wYXJ0c1skbnVtcGFydHMtMV07DQoJCSRyZXBseV90byA9ICdub3JlcGx5QCcuJGRv bWFpbjsNCgkJJHNlcCA9IGlzX3dpbmRvd3MoKSA/ICJcclxuIiA6ICJcbiI7DQoJCSRoZWFk ZXJzID0gIkZyb206IHNtZF9mcm9nbm9zdGljcyA8JHJlcGx5X3RvPiIuDQoJCQkkc2VwLidS ZXBseS1UbzogJy4kcmVwbHlfdG8uDQoJCQkkc2VwLidYLU1haWxlcjogVGV4dHBhdHRlcm4n Lg0KCQkJJHNlcC4nQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCcuDQoJCQkkc2Vw LidDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IlVURi04IicuDQoJCQkkc2Vw Ow0KCQkkYm9keSA9IG4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3JlcV9ub3RfYWxsb3dlZCcs IGFycmF5KCd7cmVxfScgPT4gJGhkcikpLm47DQoJCWZvcmVhY2ggKCRfU0VSVkVSICsgJF9S RVFVRVNUICsgJF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7DQoJCQkkYm9keSAuPSBuLiRrZXku JzogJy4kdmFyOw0KCQl9DQoNCgkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhlYWRl cnMpOw0KKi8NCgl9DQoNCn0NCg0KLy8gLS0tLS0tLS0tLSAgU1FMIGluamVjdGlvbiBkZXRl Y3Rpb24NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0KCkgew0KCWdsb2Jh bCAkc21kX3Byb2dub3N0aWNzX3NxbHByb3Q7DQoJaWYoJHNtZF9wcm9nbm9zdGljc19zcWxw cm90LT5pc01hbGljaW91cygpKSB7DQoJCWVjaG8gc21kX3Byb2dub3N0aWNzX2dUeHQoJ25p Y2VfdHJ5X2luamVjdCcpOw0KDQoJCS8vIFNlbmQgdGhlIGZvcmVuc2ljcyBvZmYNCgkJJHRv ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywgJycpOw0KCQlpZiAo JHRvKSB7DQoJCQkkc3ViamVjdCA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdzdWJqZWN0X2Nz aScpOw0KCQkJJGRvbWFpbnBhcnRzID0gZG9fbGlzdChkb1N0cmlwKHNlcnZlclNldCgnU0VS VkVSX05BTUUnKSksICcuJyk7DQoJCQkkbnVtcGFydHMgPSBjb3VudCgkZG9tYWlucGFydHMp Ow0KCQkJJGRvbWFpbiA9ICRkb21haW5wYXJ0c1skbnVtcGFydHMtMl0gLiAnLicgLiAkZG9t YWlucGFydHNbJG51bXBhcnRzLTFdOw0KCQkJJHJlcGx5X3RvID0gJ25vcmVwbHlAJy4kZG9t YWluOw0KCQkJJHNlcCA9IGlzX3dpbmRvd3MoKSA/ICJcclxuIiA6ICJcbiI7DQoJCQkkaGVh ZGVycyA9ICJGcm9tOiBzbWRfZnJvZ25vc3RpY3MgPCRyZXBseV90bz4iLg0KCQkJCSRzZXAu J1JlcGx5LVRvOiAnLiRyZXBseV90by4NCgkJCQkkc2VwLidYLU1haWxlcjogVGV4dHBhdHRl cm4nLg0KCQkJCSRzZXAuJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQnLg0KCQkJ CSRzZXAuJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iVVRGLTgiJy4NCgkJ CQkkc2VwOw0KCQkJJGJvZHkgPSBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9z cWxfaW5qZWN0JykubjsNCgkJCSRib2R5IC49ICdUWFA6ICcgLiB0eHBfdmVyc2lvbiAubi4g J1BIUDogJyAuIHBocHZlcnNpb24oKSAubi4gJ015U1FMOiAnIC4gbXlzcWxfZ2V0X3NlcnZl cl9pbmZvKCkgLm4uICgoaXNfY2FsbGFibGUoJ2FwYWNoZV9nZXRfdmVyc2lvbicpKSA/ICdB cGFjaGU6ICcgLiBhcGFjaGVfZ2V0X3ZlcnNpb24oKS5uIDogJycpOw0KCQkJZm9yZWFjaCAo JF9TRVJWRVIgKyAkX1JFUVVFU1QgKyAkX0VOViBhcyAka2V5ID0+ICR2YXIpIHsNCgkJCQkk Ym9keSAuPSBuLiRrZXkuJzogJy4kdmFyOw0KCQkJfQ0KDQoJCQltYWlsKCR0bywgJHN1Ympl Y3QsICRib2R5LCAkaGVhZGVycyk7DQoJCX0NCgkJZXhpdCgxKTsNCgl9DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tDQovLyBBZG1pbi1zaWRlIHBhbmVscw0KLy8gLS0tLS0tLS0tLS0t LS0tLS0NCi8vIC0tLS0tLS0tLS0gIEFsYXJtIGFja25vd2xlZGdlbWVudA0KZnVuY3Rpb24g c21kX3Byb2dub3N0aWNzX2FjaygkbXNnPScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3Rp Y3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLCAkcHJlZnM7DQoNCgkkc3Vi bWl0ID0gZ3BzKCdzdWJtaXQnKTsNCgkkY3NpID0gZ3BzKCdjc2knKTsNCg0KCSRhY2sgPSBn cHMoJ3NlbGVjdGVkJyk7DQoJJHNtZF9wcm9nX2FjayA9IChpc19hcnJheSgkYWNrKSkgPyAk YWNrIDogKCgkYWNrKSA/IGFycmF5KCRhY2spIDogYXJyYXkoKSk7DQoNCgkkb3V0ID0gYXJy YXkoKTsNCglpZiAoJHN1Ym1pdCA9PSAnQWNrbm93bGVkZ2UnKSB7DQoJCWlmICgkY3MgPSBA ZmlsZSgkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJCWZvcmVhY2ggKCRjcyBh cyAkYykgew0KCQkJCWlmIChwcmVnX21hdGNoKCdAXihcUyspOiBcKCguKilcKSRAJywgdHJp bSgkYyksICRtKSkgew0KCQkJCQlsaXN0KCwkZmlsZSwkbWQ1KSA9ICRtOw0KCQkJCQlpZiAo KCRrZXkgPSBhcnJheV9zZWFyY2goJGZpbGUsICRzbWRfcHJvZ19hY2spKSAhPT0gZmFsc2Up IHsNCgkJCQkJCWlmIChmaWxlX2V4aXN0cygkZmlsZSkpIHsNCgkJCQkJCQkkY29udGVudCA9 IHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUpOw0KCQkJCQkJCSRvdXRbXSA9ICRm aWxlLic6ICgnLm1kNSgkY29udGVudCkuJyknOw0KCQkJCQkJfQ0KCQkJCQkJLy8gUmVtb3Zl IGZpbGVzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgY2hlY2tzdW0gc28gd2UncmUgbGVm dCB3aXRoIGFkZGl0aW9ucw0KCQkJCQkJdW5zZXQoJHNtZF9wcm9nX2Fja1ska2V5XSk7DQoJ CQkJCX0gZWxzZSB7DQoJCQkJCQkkb3V0W10gPSB0cmltKCRjKTsNCgkJCQkJfQ0KCQkJCX0N CgkJCX0NCg0KCQkJLy8gVGFjayBvbiBhbnkgbmV3IGZpbGVzDQoJCQlmb3JlYWNoICgkc21k X3Byb2dfYWNrIGFzICRmaWxlKSB7DQoJCQkJaWYgKGZpbGVfZXhpc3RzKCRmaWxlKSAmJiAk ZmlsZSAhPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3Vtcykgew0KCQkJCQkkY29udGVudCA9 IHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUpOw0KCQkJCQkkb3V0W10gPSAkZmls ZS4nOiAoJy5tZDUoJGNvbnRlbnQpLicpJzsNCgkJCQl9DQoJCQl9DQoJCQkkZmggPSBmb3Bl bigkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcywgInciKTsNCgkJCWZ3cml0ZSgkZmgsIGpv aW4obiwgJG91dCkpOw0KCQkJZmNsb3NlKCRmaCk7DQoJCQlzbWRfcHJvZ25vc3RpY3Nfc2Vs Zl9oYXNoKCk7DQoJCQkkbXNnID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2Fja2VkJyk7DQoJ CX0NCgl9DQoJaWYgKCRjc2kgJiYgJHNtZF9wcm9nX2Fjaykgew0KCQkgJG1zZyA9IHNtZF9w cm9nbm9zdGljc19nVHh0KCdjc2lfc2VudCcpOw0KCX0gZWxzZSBpZiAoJGNzaSkgew0KCQkg JG1zZyA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdub25lX3NlbGVjdGVkJyk7DQoJfQ0KDQoJ cGFnZXRvcChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzJyksICRtc2cp Ow0KCWV4dHJhY3Qoc21kX3Byb2dub3N0aWNzX2J1dHRvbnMoKSk7DQoNCglsaXN0KCRub2ss ICRtaXNzLCAkYWRkZWQsICRoYXNoZG93biwgJGhhc2htb2QpID0gc21kX2RvX3Byb2dub3N0 aWNzKDEpOw0KCSRub2sgPSBpc19hcnJheSgkbm9rKSA/ICRub2sgOiBhcnJheSgpOw0KCSRt aXNzID0gaXNfYXJyYXkoJG1pc3MpID8gJG1pc3MgOiBhcnJheSgpOw0KCSRhZGRlZCA9IGlz X2FycmF5KCRhZGRlZCkgPyAkYWRkZWQgOiBhcnJheSgpOw0KCSRoYXNobW9kID0gaXNfYXJy YXkoJGhhc2htb2QpID8gJGhhc2htb2QgOiBhcnJheSgpOw0KCSRlcnJudW0gPSBjb3VudChh cnJheV9tZXJnZSgkbm9rLCAkbWlzcywgJGFkZGVkLCAkaGFzaG1vZCkpOw0KCSRmb3JlbnNp Y3MgPSBhcnJheSgpOw0KCSRsZm9ybSA9ICdZLW0tZCBIOmk6cyc7DQoNCgllY2hvICRidG5D U1Muc3RhcnRUYWJsZSgnbGlzdCcpOw0KCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfcHJvZ25v c3RpY3NfZ1R4dCgndHRsX2FjaycpKSwgJyBjb2xzcGFuPSIzIicpIC4gdGRhKCRidG5TZXR1 cC4kYnRuRmlsZXMuJGJ0bkFkdmljZSwgJGJ0blN0eWxlKSApOw0KCWVjaG8gJzxmb3JtIG5h bWU9Imxvbmdmb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9wcm9n bm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19hY2smc21kX3Byb2du b3N0aWNzX3N1cHByZXNzPTEiPic7DQoJaWYgKCRlcnJudW0gPiAwKSB7DQoJCWZvcmVhY2go JGhhc2htb2QgYXMgJG5hdWdodHkpIHsNCgkJCSRzZWwgPSBpbl9hcnJheSgkbmF1Z2h0eSwg JHNtZF9wcm9nX2Fjayk7DQoJCQllY2hvIHRyKHRkKGNoZWNrYm94KCdzZWxlY3RlZFtdJywg JG5hdWdodHksICRzZWwpLCAnJywgJ211bHRpLWVkaXQnKS50ZGEoc21kX3Byb2dub3N0aWNz X2dUeHQoJ2xibF9oYXNobW9kJykpLnRkYSgkbmF1Z2h0eSkpOw0KCQl9DQoJCWZvcmVhY2go JG5vayBhcyAkbmF1Z2h0eSkgew0KCQkJJHNlbCA9IGluX2FycmF5KCRuYXVnaHR5LCAkc21k X3Byb2dfYWNrKTsNCgkJCWVjaG8gdHIodGQoY2hlY2tib3goJ3NlbGVjdGVkW10nLCAkbmF1 Z2h0eSwgJHNlbCksICcnLCAnbXVsdGktZWRpdCcpLnRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnbGJsX2NoYW5nZWQnKSkudGRhKCRuYXVnaHR5KSk7DQoJCQlpZiAoJHNlbCkgew0KCQkJ CSRmaSA9IHN0YXQoJG5hdWdodHkpOw0KCQkJCSRmb3JlbnNpY3NbJ25vayddW10gPSBzbWRf cHJvZ25vc3RpY3NfZm9yZW5zaWNfb3V0cHV0KCRuYXVnaHR5LCAkZmkpOw0KCQkJCSRmb3Jl bnNpY3NbJ2ZpbGVzJ11bJG5hdWdodHldID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShm aWxlX2dldF9jb250ZW50cygkbmF1Z2h0eSkpKTsNCgkJCX0NCgkJfQ0KCQlmb3JlYWNoKCRt aXNzIGFzICRuYXVnaHR5KSB7DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5hdWdodHksICRzbWRf cHJvZ19hY2spOw0KCQkJZWNobyB0cih0ZChjaGVja2JveCgnc2VsZWN0ZWRbXScsICRuYXVn aHR5LCAkc2VsKSwgJycsICdtdWx0aS1lZGl0JykudGRhKHNtZF9wcm9nbm9zdGljc19nVHh0 KCdsYmxfbWlzc2luZycpKS50ZGEoJG5hdWdodHkpKTsNCgkJCWlmICgkc2VsKSB7DQoJCQkJ JGZvcmVuc2ljc1snbWlzcyddW10gPSAkbmF1Z2h0eTsNCgkJCX0NCgkJfQ0KCQlmb3JlYWNo KCRhZGRlZCBhcyAkbmF1Z2h0eSkgew0KCQkJJHNlbCA9IGluX2FycmF5KCRuYXVnaHR5LCAk c21kX3Byb2dfYWNrKTsNCgkJCWVjaG8gdHIodGQoY2hlY2tib3goJ3NlbGVjdGVkW10nLCAk bmF1Z2h0eSwgJHNlbCksICcnLCAnbXVsdGktZWRpdCcpLnRkYShzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnbGJsX2FkZGVkJykpLnRkYSgkbmF1Z2h0eSkpOw0KCQkJaWYgKCRzZWwpIHsNCgkJ CQkkZmkgPSBzdGF0KCRuYXVnaHR5KTsNCgkJCQkkZm9yZW5zaWNzWydhZGRlZCddW10gPSBz bWRfcHJvZ25vc3RpY3NfZm9yZW5zaWNfb3V0cHV0KCRuYXVnaHR5LCAkZmkpOw0KCQkJCSRm b3JlbnNpY3NbJ2ZpbGVzJ11bJG5hdWdodHldID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29k ZShmaWxlX2dldF9jb250ZW50cygkbmF1Z2h0eSkpKTsNCgkJCX0NCgkJfQ0KCQlpZiAoJHNt ZF9wcm9nX2FjayAmJiAkcHJlZnNbJ2xvZ2dpbmcnXSAhPSAnbm9uZScpIHsNCgkJCSRkZXRl Y3QgPSBleHBsb2RlKCcsJyxnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RkZXRlY3Qn LCB0aW1lKCkpKTsNCgkJCWlmICghaXNzZXQoJGRldGVjdFsxXSkpIHsNCgkJCQkkZGV0ZWN0 WzFdID0gJGRldGVjdFswXTsNCgkJCX0NCgkJCSRycyA9IHNhZmVfcm93cygnKicsICd0eHBf bG9nJywgInRpbWUgQkVUV0VFTiAnIiAuIGRhdGUoJGxmb3JtLCAoJGRldGVjdFswXSAtICRw cmVmc1snc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEnXSkpIC4gIicgQU5EICciIC4gZGF0 ZSgkbGZvcm0sICgkZGV0ZWN0WzFdICsgNSkpIC4gIiciKTsNCgkJCWZvcmVhY2ggKCRycyBh cyAkcm93KSB7DQoJCQkJJGZvcmVuc2ljc1sndHhwX2xvZyddW10gPSBqb2luKCcsJywkcm93 KTsNCgkJCX0NCgkJfQ0KCQllY2hvIHRyKHRkYSgNCgkJCQlzZWxlY3RfYnV0dG9ucygpDQoJ CQksJyBjbGFzcz0ibXVsdGktZWRpdCIgY29sc3Bhbj0iMyIgc3R5bGU9InRleHQtYWxpZ246 IHJpZ2h0OyBib3JkZXI6IG5vbmU7IicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0bkFja0l0Ligo Z2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywgJycpKSA/ICRidG5DU0kg OiAnJyksICRidG5TdHlsZSkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGQoc21kX3Byb2du b3N0aWNzX2dUeHQoJ25vX2FsYXJtcycpKSk7DQoJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3Rp Y3NfbGFzdGRldGVjdCcsICcnLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRf aW5wdXQnKTsNCgl9DQoJZWNobyAnPC9mb3JtPic7DQoJZWNobyBlbmRUYWJsZSgpOw0KDQoJ aWYgKCRjc2kgJiYgJGZvcmVuc2ljcykgew0KCQkvLyBTZW5kIHRoZSBmb3JlbnNpY3Mgb2Zm DQoJCSR0byA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnKTsN CgkJaWYgKCR0bykgew0KCQkJJHN1YmplY3QgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3Vi amVjdF9jc2knKTsNCgkJCSRkb21haW5wYXJ0cyA9IGRvX2xpc3QoZG9TdHJpcChzZXJ2ZXJT ZXQoJ1NFUlZFUl9OQU1FJykpLCAnLicpOw0KCQkJJG51bXBhcnRzID0gY291bnQoJGRvbWFp bnBhcnRzKTsNCgkJCSRkb21haW4gPSAkZG9tYWlucGFydHNbJG51bXBhcnRzLTJdIC4gJy4n IC4gJGRvbWFpbnBhcnRzWyRudW1wYXJ0cy0xXTsNCgkJCSRyZXBseV90byA9ICdub3JlcGx5 QCcuJGRvbWFpbjsNCgkJCSRzZXAgPSBpc193aW5kb3dzKCkgPyAiXHJcbiIgOiAiXG4iOw0K CQkJJGhlYWRlcnMgPSAiRnJvbTogc21kX2Zyb2dub3N0aWNzIDwkcmVwbHlfdG8+Ii4NCgkJ CQkkc2VwLidSZXBseS1UbzogJy4kcmVwbHlfdG8uDQoJCQkJJHNlcC4nWC1NYWlsZXI6IFRl eHRwYXR0ZXJuJy4NCgkJCQkkc2VwLidDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0 Jy4NCgkJCQkkc2VwLidDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IlVURi04 IicuDQoJCQkJJHNlcDsNCgkJCSRib2R5ID0NCgkJCQluLidUWFA6ICcgLiB0eHBfdmVyc2lv biAubi4gJ1BIUDogJyAuIHBocHZlcnNpb24oKSAubi4gJ015U1FMOiAnIC4gbXlzcWxfZ2V0 X3NlcnZlcl9pbmZvKCkgLm4uICgoaXNfY2FsbGFibGUoJ2FwYWNoZV9nZXRfdmVyc2lvbicp KSA/ICdBcGFjaGU6ICcgLiBhcGFjaGVfZ2V0X3ZlcnNpb24oKS5uIDogJycpLg0KCQkJCSgo aXNzZXQoJGZvcmVuc2ljc1snbm9rJ10pKSA/IG4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3By ZWFtYmxlX25vaycpLm4uam9pbihuLCRmb3JlbnNpY3NbJ25vayddKSA6ICcnKS4NCgkJCQko KGlzc2V0KCRmb3JlbnNpY3NbJ21pc3MnXSkpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0 KCdwcmVhbWJsZV9taXNzJykubi5qb2luKG4sJGZvcmVuc2ljc1snbWlzcyddKSA6ICcnKS4N CgkJCQkoKGlzc2V0KCRmb3JlbnNpY3NbJ2FkZGVkJ10pKSA/IG4ubi5zbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgncHJlYW1ibGVfYWRkZWQnKS5uLmpvaW4obiwkZm9yZW5zaWNzWydhZGRlZCdd KSA6ICcnKS4NCgkJCQkoKGlzc2V0KCRmb3JlbnNpY3NbJ3R4cF9sb2cnXSkpID8gbi5uLnNt ZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV90eHBsb2cnKS5uLmpvaW4obiwkZm9yZW5z aWNzWyd0eHBfbG9nJ10pIDogbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdub19sb2dfZW50 cmllcycpKTsNCgkJCWlmIChpc3NldCgkZm9yZW5zaWNzWydmaWxlcyddKSkgew0KCQkJCSRi b2R5IC49IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfZmlsZXMnKTsNCgkJ CQlmb3JlYWNoICgkZm9yZW5zaWNzWydmaWxlcyddIGFzICRmbiA9PiAkY29udGVudCkgew0K CQkJCQkkYm9keSAuPSBuLm4uJGZuLm4ubi4kY29udGVudC5uOw0KCQkJCX0NCgkJCX0NCgkN CgkJCW1haWwoJHRvLCAkc3ViamVjdCwgJGJvZHksICRoZWFkZXJzKTsNCgkJfQ0KCX0NCn0N Cg0KLy8gLS0tLS0tLS0tLSBGaWxlIG1hbmFnZW1lbnQNCmZ1bmN0aW9uIHNtZF9wcm9nbm9z dGljc19maWxlcygkbXNnPScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQs ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0KDQoJZXh0cmFjdChkb1NsYXNoKGdwc2Eo YXJyYXkoJ3N1Ym1pdCcpKSkpOw0KCSRzbWRfcHJvZ25vc3RpY3NfZmlsZXMgPSBncHMoJ3Nt ZF9wcm9nbm9zdGljc19maWxlcycpOw0KCWlmICghaXNfYXJyYXkoJHNtZF9wcm9nbm9zdGlj c19maWxlcykpIHsNCgkJJHNtZF9wcm9nbm9zdGljc19maWxlcyA9IGFycmF5KCk7DQoJfQ0K DQoJJGFkZHMgPSAoc3RycG9zKGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9y JyksICdhZGQnKSAhPT0gZmFsc2UpOw0KCSRmaWxlbGlzdCA9IHNtZF9wcm9nbm9zdGljc19y ZWFkZmlsZXMoKTsNCgkkYWxsY291bnQgPSBjb3VudCgkZmlsZWxpc3QpOw0KDQoJaWYgKCRz dWJtaXQgPT0gJ1NhdmUnKSB7DQoJCSRvdXRmaWxlID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAo JHNtZF9wcm9nbm9zdGljc19maWxlcyBhcyAkZmlsZSkgew0KCQkJJGNvbnRlbnQgPSBzbWRf cHJvZ25vc3RpY3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCSRvdXRmaWxlW10gPSAkZmlsZS4n OiAoJy5tZDUoJGNvbnRlbnQpLicpJzsNCgkJfQ0KDQoJCSRmaCA9IGZvcGVuKCRzbWRfcHJv Z25vc3RpY3NfY2hlY2tzdW1zLCAidyIpOw0KCQlmd3JpdGUoJGZoLCBqb2luKG4sICRvdXRm aWxlKSk7DQoNCgkJaWYgKCRhZGRzKSB7DQoJCQkkYWRkaXRpb25zID0gYXJyYXlfZGlmZigk ZmlsZWxpc3QsICRzbWRfcHJvZ25vc3RpY3NfZmlsZXMpOw0KCQkJJGFkZGVkID0gYXJyYXko KTsNCgkJCWZvcmVhY2ggKCRhZGRpdGlvbnMgYXMgJGFkZGl0aW9uKSB7DQoJCQkJJGFkZGVk W10gPSAkYWRkaXRpb24uJzogKE5VTEwpJzsNCgkJCX0NCgkJCWZ3cml0ZSgkZmgsIG4uam9p bihuLCAkYWRkZWQpKTsNCgkJfQ0KCQlmY2xvc2UoJGZoKTsNCgkJc21kX3Byb2dub3N0aWNz X3NlbGZfaGFzaCgpOw0KCQlzbWRfZG9fcHJvZ25vc3RpY3MoMik7IC8vIFNpbGVudGx5IGFj a25vd2xlZGdlIGFsbCB0aGUgZmlsZXMNCgkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19s YXN0ZGV0ZWN0JywgJycsICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1 dCcpOw0KCQkkbXNnID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2ZpbGVzX3VwZGF0ZWQnKTsN Cgl9DQoNCglwYWdldG9wKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3Mn KSwgJG1zZyk7DQoJZXh0cmFjdChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCSRz bWRfcHJvZ25vc3RpY3NfZmlsZXMgPSBhcnJheSgpOw0KCWlmICgkY3MgPSBAZmlsZSgkc21k X3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJZm9yZWFjaCAoJGNzIGFzICRjKSB7DQoJ CQlpZiAocHJlZ19tYXRjaCgnQF4oXFMrKTogXCgoLiopXCkkQCcsIHRyaW0oJGMpLCAkbSkp IHsNCgkJCQlsaXN0KCwkZmlsZSwkbWQ1KSA9ICRtOw0KCQkJCWlmICgkbWQ1ICE9ICdOVUxM Jykgew0KCQkJCQkkc21kX3Byb2dub3N0aWNzX2ZpbGVzW10gPSAkZmlsZTsNCgkJCQl9DQoJ CQl9DQoJCX0NCgl9DQoNCgkkbW9uY291bnQgPSBjb3VudCgkc21kX3Byb2dub3N0aWNzX2Zp bGVzKTsNCg0KCWlmICgkZmlsZWxpc3QpIHsNCgkJJGZpbGV6ID0gYXJyYXkoKTsNCgkJZm9y ZWFjaCgkZmlsZWxpc3QgYXMgJGtleSA9PiAkdmFsKSB7DQoJCQkkZmlsZXpbJHZhbF0gPSAk ZmlsZWxpc3RbJGtleV07DQoJICAgfQ0KCQkkZmlsZXNlbCA9IHNtZF9wcm9nbm9zdGljc19t dWx0aXNlbCgnc21kX3Byb2dub3N0aWNzX2ZpbGVzJywgJGZpbGV6LCAkc21kX3Byb2dub3N0 aWNzX2ZpbGVzKTsNCgl9DQoJJHNob3dmaWxlcyA9IChpc3NldCgkZmlsZXNlbCkgJiYgJGZp bGVzZWwpOw0KDQoJZWNobyAkYnRuQ1NTLnN0YXJ0VGFibGUoJ2xpc3QnKTsNCgllY2hvIHRy KHRkYShzdHJvbmcoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9maWxlcycpKSkgLiB0ZGEo JGJ0blNldHVwLiRidG5BY2suJGJ0bkFkdmljZSwgJGJ0blN0eWxlKSApOw0KCWVjaG8gdHIo dGRjcyhzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3Vycm1vbicsIGFycmF5KCd7Y3Vycn0nID0+ ICRtb25jb3VudCwgJ3tvdXRvZn0nID0+ICRhbGxjb3VudCkpIC4oKCRzaG93ZmlsZXMpID8g YnIuYnIuIHNtZF9wcm9nbm9zdGljc19nVHh0KCdtb25maWxlc19leHBsYWluJykgOiAnJyks IDEsIDQwMCkpOw0KCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9 Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2Zp bGVzIj4nOw0KCWVjaG8gKCRzaG93ZmlsZXMpID8gdHIodGRhKCRmaWxlc2VsKSkgOiB0cih0 ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ25vX2ZpbGVzJykpKTsNCgllY2hvIHRyKHRkYShm SW5wdXQoJ2hpZGRlbicsICdzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3MnLCAxKS4kYnRuU2F2 ZSwgJGJ0blN0eWxlKSk7DQoJZWNobyAnPC9mb3JtPic7DQoJZWNobyBlbmRUYWJsZSgpOw0K fQ0KDQovLyAtLS0tLS0tLS0tIFNldHVwIC8gcHJlZnMNCmZ1bmN0aW9uIHNtZF9wcm9nbm9z dGljc19zZXR1cCgkbXNnPScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQs ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLCAkcHJlZnM7DQoNCglwYWdldG9wKHNtZF9w cm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3MnKSwgJG1zZyk7DQoNCgkkb3JpZ2xv YyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYycsIHJlYWxwYXRoKHR4cGF0 aC5EUy4nLi4nLkRTKS5EUywgMSk7DQoJJG9yaWdkaXIgPSBydHJpbShnZXRfcHJlZignc21k X3Byb2dub3N0aWNzX2RpcicsIHJlYWxwYXRoKHR4cGF0aCksIDEpLCBEUyk7DQoJJG9yaWdw ZnggPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3ByZWZpeCcsICcnLCAxKTsNCg0KCSRw cmVmbGlzdCA9IGFycmF5KA0KCQknc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEnLA0KCQkn c21kX3Byb2dub3N0aWNzX2FsYXJtX2ZyZXEnLA0KCQknc21kX3Byb2dub3N0aWNzX2NoZWNr X3doZXJlJywNCgkJJ3NtZF9wcm9nbm9zdGljc19tYWlsdG8nLA0KCQknc21kX3Byb2dub3N0 aWNzX21haWx0b19jc2knLA0KCQknc21kX3Byb2dub3N0aWNzX2RpcicsDQoJCSdzbWRfcHJv Z25vc3RpY3NfcHJlZml4JywNCgkJJ3NtZF9wcm9nbm9zdGljc19saXN0bG9jJywNCgkJJ3Nt ZF9wcm9nbm9zdGljc19leGNsdWRpcicsDQoJCSdzbWRfcHJvZ25vc3RpY3NfaWdub3Jlcycs DQoJKTsNCg0KCSR3YXJubG9jID0gJyc7DQoJJG5vdGlmeSA9IGdwcygnc21kX3Byb2dub3N0 aWNzX25vdGlmeV92aWEnKTsNCgkkY2hmb3IgPSBncHMoJ3NtZF9wcm9nbm9zdGljc19jaGVj a19mb3InKTsNCgkkcmVxcyA9IGdwcygnc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzJyk7 DQoJJHNxbGluID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCcpOw0KCSRzbWRf cHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYSA9IGpvaW4oJ3wnLCAoKGlzX2FycmF5KCRub3RpZnkp KSA/ICRub3RpZnkgOiBhcnJheSgkbm90aWZ5KSkpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hl Y2tfZm9yID0gam9pbignfCcsICgoaXNfYXJyYXkoJGNoZm9yKSkgPyAkY2hmb3IgOiBhcnJh eSgkY2hmb3IpKSk7DQoJJHNtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycyA9IGpvaW4oJ3wn LCAoKGlzX2FycmF5KCRyZXFzKSkgPyAkcmVxcyA6IGFycmF5KCRyZXFzKSkpOw0KCSRzbWRf cHJvZ25vc3RpY3Nfc3FsX2luamVjdCA9IGpvaW4oJ3wnLCAoKGlzX2FycmF5KCRzcWxpbikp ID8gJHNxbGluIDogYXJyYXkoJHNxbGluKSkpOw0KDQoJLy8gR3JhYiB0aGUgc2F2ZWQgcHJl ZiB2YWx1ZXMgYW5kIHRhY2sgb24gdGhlIGFycmF5IGl0ZW0ocykNCglleHRyYWN0KGRvU2xh c2goZ3BzYShhcnJheV9tZXJnZShhcnJheSgnc3VibWl0JyksICRwcmVmbGlzdCkpKSk7DQoJ JHByZWZsaXN0W10gPSAnc21kX3Byb2dub3N0aWNzX25vdGlmeV92aWEnOw0KCSRwcmVmbGlz dFtdID0gJ3NtZF9wcm9nbm9zdGljc19jaGVja19mb3InOw0KCSRwcmVmbGlzdFtdID0gJ3Nt ZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycyc7DQoJJHByZWZsaXN0W10gPSAnc21kX3Byb2du b3N0aWNzX3NxbF9pbmplY3QnOw0KCSRzbWRfcHJvZ25vc3RpY3NfZGlyID0gcnRyaW0oJHNt ZF9wcm9nbm9zdGljc19kaXIsIERTKTsNCg0KCWlmICgkc3VibWl0ID09ICdTYXZlJykgew0K CQlpZiAoKCRzbWRfcHJvZ25vc3RpY3NfZGlyICE9ICRvcmlnZGlyKSB8fCAoJHNtZF9wcm9n bm9zdGljc19wcmVmaXggIT0gJG9yaWdwZngpKSB7DQoJCQlpZiAoaXNfZGlyKCRzbWRfcHJv Z25vc3RpY3NfZGlyKSAmJiBpc193cml0YWJsZSgkc21kX3Byb2dub3N0aWNzX2RpcikpIHsN CgkJCQkvLyBFdmVyeXRoaW5nIE9LIHNvIGRvIG5vdGhpbmcgZm9yIG5vdw0KCQkJfSBlbHNl IHsNCgkJCQkvLyBJZ25vcmUgbmV3IGRpciBhbmQgcmVzZXQgaXQgdG8gd2hhdCBpdCB3YXMg YmVmb3JlDQoJCQkJJHNtZF9wcm9nbm9zdGljc19kaXIgPSAkb3JpZ2RpcjsNCgkJCX0NCg0K CQkJLy8gUm9vbSBmb3IgbW9yZSBjb25maWcgZmlsZXMgYXMgYW5kIHdoZW4gdGhleSBhcmUg cmVxdWlyZWQNCgkJCSRmaWxlbGlzdFtdID0gJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXM7 DQoNCgkJCWZvcmVhY2ggKCRmaWxlbGlzdCBhcyAkZmlsZSkgew0KCQkJCSRmaWxlbmFtZSA9 ICRzbWRfcHJvZ25vc3RpY3NfcHJlZml4Lmx0cmltKGJhc2VuYW1lKCRmaWxlKSwgJG9yaWdw ZngpOw0KCQkJCXJlbmFtZSgkZmlsZSwgcnRyaW0oJHNtZF9wcm9nbm9zdGljc19kaXIsIERT KS5EUy4kZmlsZW5hbWUpOw0KCQkJfQ0KCQl9DQoNCgkJLy8gV3JpdGUgYWxsIHRoZSBwcmVm cw0KCQlmb3JlYWNoICgkcHJlZmxpc3QgYXMgJHByZWZ2YWwpIHsNCgkJCXNldF9wcmVmKCRw cmVmdmFsLCAkJHByZWZ2YWwsICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9p bnB1dCcpOw0KCQl9DQoJCWlmICgkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MgIT0gJG9yaWds b2MpIHsNCgkJCSR3YXJubG9jID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3dhcm5fbG9jJyk7 DQoJCX0NCg0KCX0NCg0KCSRzbWRfcHJvZ25vc3RpY3NfZGlyID0gZ2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19kaXInLCB0eHBhdGgsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfcHJlZml4 ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19wcmVmaXgnLCAnJywgMSk7DQoJJHNtZF9w cm9nbm9zdGljc19jaGVja19mb3IgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNr X2ZvcicsICdkZWxldGV8bW9kaWZ5JywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19jaGVja193 aGVyZSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUnLCAnYWRtaW4n LCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEgPSBnZXRfcHJlZignc21kX3By b2dub3N0aWNzX2NoZWNrX2ZyZXEnLCAzNjAwLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2Fs YXJtX2ZyZXEgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2FsYXJtX2ZyZXEnLCA4NjQw MCwgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhID0gZ2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19ub3RpZnlfdmlhJywgJycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfbWFp bHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG8nLCAnJywgMSk7DQoJJHNt ZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19t YWlsdG9fY3NpJywgJycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYyA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYycsIHJlYWxwYXRoKHR4cGF0aC5EUy4nLi4n LkRTKS5EUywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19leGNsdWRpciA9IGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfZXhjbHVkaXInLCAnaW1hZ2VzLCBmaWxlcywgdG1wJywgMSk7DQoJ JHNtZF9wcm9nbm9zdGljc19pZ25vcmVzID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19p Z25vcmVzJywgJ2Vycm9yX2xvZycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRl cnMgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzJywgJ1RSQUNFfFBV VHxERUxFVEUnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QgPSBnZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLCAnJywgMSk7DQoNCglleHRyYWN0KHNt ZF9wcm9nbm9zdGljc19idXR0b25zKCkpOw0KDQoJJGFkZHMgPSAoc3RycG9zKCRzbWRfcHJv Z25vc3RpY3NfY2hlY2tfZm9yLCAnYWRkJykgIT09IGZhbHNlKTsNCgkkZGVscyA9IChzdHJw b3MoJHNtZF9wcm9nbm9zdGljc19jaGVja19mb3IsICdkZWxldGUnKSAhPT0gZmFsc2UpOw0K CSRtb2RzID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvciwgJ21vZGlmeScp ICE9PSBmYWxzZSk7DQoJJHJoX3RyYWNlID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX3Jl cV9oZWFkZXJzLCAnVFJBQ0UnKSAhPT0gZmFsc2UpOw0KCSRyaF9wdXQgPSAoc3RycG9zKCRz bWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMsICdQVVQnKSAhPT0gZmFsc2UpOw0KCSRyaF9k ZWwgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMsICdERUxFVEUnKSAh PT0gZmFsc2UpOw0KCSRzcWxwdWIgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3Nfc3FsX2lu amVjdCwgJ3B1YmxpYycpICE9PSBmYWxzZSk7DQoJJHNxbGFkbSA9IChzdHJwb3MoJHNtZF9w cm9nbm9zdGljc19zcWxfaW5qZWN0LCAnYWRtaW4nKSAhPT0gZmFsc2UpOw0KCSRoZWxwTGlu ayA9ICI/ZXZlbnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0kc21kX3Byb2dub3N0 aWNzX2V2ZW50I3NtZF9zZXR1cCI7DQoNCgllY2hvICRidG5DU1Muc3RhcnRUYWJsZSgnbGlz dCcsICcnLCAnc21kX3Byb2dub3N0aWNzX3NldHVwJyk7DQoJZWNobyB0cih0ZGNzKHN0cm9u ZyhzbWRfcHJvZ25vc3RpY3NfZ1R4dCgndHRsX3NldHVwJykpLnNwLnNtZF9wcm9nbm9zdGlj c19nVHh0KCdoZWxwX2xpbmsnLCBhcnJheSgne2xpbmt9JyA9PiAkaGVscExpbmspKSwgMikg LiB0ZGEoJGJ0bkZpbGVzLiRidG5BY2suJGJ0bkFkdmljZSwgJGJ0blN0eWxlKSApOw0KCWVj aG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0 aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX3NldHVwIj4nOw0KCWVjaG8g dHIodGRjcyhoZWQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9tb25vcHRzJyksIDMpICwy KSk7DQoJZWNobyB0cih0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoZWNrX3doZXJlJyks ICcgY2xhc3M9InNtZF9sYWJlbCInKS50ZGEocmFkaW9TZXQoYXJyYXkoJ2FkbWluJyA9PiBn VHh0KCdubycpLCAnYWRtaW58cHVibGljJyA9PiBnVHh0KCd5ZXMnKSksICdzbWRfcHJvZ25v c3RpY3NfY2hlY2tfd2hlcmUnLCAkc21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlKSwgJyBp ZD0ic21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlIicpKTsNCgllY2hvIHRyKHRkYShzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfZnJlcScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJyku dGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcScsICRzbWRf cHJvZ25vc3RpY3NfY2hlY2tfZnJlcSwgJycsJycsJycsMTUpLnNwLnNtZF9wcm9nbm9zdGlj c19nVHh0KCdzZWNvbmRzJykpKTsNCgllY2hvIHRyKHRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnYWxhcm1fZnJlcScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykudGRhKGZJbnB1dCgndGV4 dCcsICdzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcScsICRzbWRfcHJvZ25vc3RpY3NfYWxh cm1fZnJlcSwgJycsJycsJycsMTUpLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzZWNvbmRz JykpKTsNCgllY2hvIHRyKHRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbm90aWZ5X3ZpYScp LCAnIGNsYXNzPSJzbWRfbGFiZWwiJykudGRhKA0KCQljaGVja2JveCgnc21kX3Byb2dub3N0 aWNzX25vdGlmeV92aWFbXScsICd0eHAnLCBzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19ub3Rp ZnlfdmlhLCAndHhwJykgIT09IGZhbHNlKSAuDQoJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnbm90aWZ5X3R4cCcpLic8L2xhYmVsPicuDQoJCWNoZWNrYm94KCdzbWRfcHJv Z25vc3RpY3Nfbm90aWZ5X3ZpYVtdJywgJ2VtYWlsJywgc3RycG9zKCRzbWRfcHJvZ25vc3Rp Y3Nfbm90aWZ5X3ZpYSwgJ2VtYWlsJykgIT09IGZhbHNlKS4NCgkJJzxsYWJlbD4nLnNtZF9w cm9nbm9zdGljc19nVHh0KCdub3RpZnlfZW1haWwnKS4nPC9sYWJlbD4nDQoJKSk7DQoJZWNo byB0cih0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ21haWx0bycpLCAnIGNsYXNzPSJzbWRf bGFiZWwiJykudGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvJywg JHNtZF9wcm9nbm9zdGljc19tYWlsdG8sICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnY3N2JykpKTsNCgllY2hvIHRyKHRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgn bWFpbHRvX2NzaScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykudGRhKGZJbnB1dCgndGV4dCcs ICdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICRzbWRfcHJvZ25vc3RpY3NfbWFpbHRv X2NzaSwgJycsJycsJycsNjApLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdjc3YnKSkpOw0K CWVjaG8gdHIodGRjcyhoZWQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9yZWFsb3B0cycp LCAzKSwgMikpOw0KCWVjaG8gdHIodGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdyZXFfaGVh ZGVycycpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykudGRhKA0KCQljaGVja2JveCgnc21kX3By b2dub3N0aWNzX3JlcV9oZWFkZXJzW10nLCAnVFJBQ0UnLCAkcmhfdHJhY2UpLg0KCQknPGxh YmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3JoX3RyYWNlJykuJzwvbGFiZWw+Jy4NCgkJ Y2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVyc1tdJywgJ1BVVCcsICRyaF9w dXQpLg0KCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3JoX3B1dCcpLic8L2xh YmVsPicuDQoJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnNbXScsICdE RUxFVEUnLCAkcmhfZGVsKS4NCgkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdy aF9kZWwnKS4nPC9sYWJlbD4nDQoJKSk7DQoJZWNobyB0cih0ZGEoc21kX3Byb2dub3N0aWNz X2dUeHQoJ3NxbF9pbmplY3QnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLnRkYSgNCgkJY2hl Y2tib3goJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0W10nLCAncHVibGljJywgJHNxbHB1 YikgLg0KCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NxbF9pbnB1YicpLic8 L2xhYmVsPicuDQoJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdFtdJywg J2FkbWluJywgJHNxbGFkbSkuDQoJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgn c3FsX2luYWRtJykuJzwvbGFiZWw+Jw0KCSkpOw0KDQoJZWNobyB0cih0ZGNzKGhlZChzbWRf cHJvZ25vc3RpY3NfZ1R4dCgndHRsX2ZpbGVvcHRzJyksIDMpLCAyKSk7DQoJZWNobyB0cih0 ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoZWNrX2ZvcicpLCAnIGNsYXNzPSJzbWRfbGFi ZWwiJykudGRhKA0KCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcltdJywg J2FkZCcsICRhZGRzKSAuDQoJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hf YWRkJykuJzwvbGFiZWw+Jy4NCgkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19jaGVja19m b3JbXScsICdkZWxldGUnLCAkZGVscykuDQoJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnY2hfZGVsJykuJzwvbGFiZWw+Jy4NCgkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGlj c19jaGVja19mb3JbXScsICdtb2RpZnknLCAkbW9kcykuDQoJCSc8bGFiZWw+Jy5zbWRfcHJv Z25vc3RpY3NfZ1R4dCgnY2hfbW9kJykuJzwvbGFiZWw+Jw0KCSkpOw0KCWVjaG8gdHIodGRh KHNtZF9wcm9nbm9zdGljc19nVHh0KCdsaXN0bG9jJyksICcgY2xhc3M9InNtZF9sYWJlbCIn KS50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19saXN0bG9jJywgJHNtZF9w cm9nbm9zdGljc19saXN0bG9jLCAnJywnJywnJyw2MCkuc3Auc21kX3Byb2dub3N0aWNzX2dU eHQoJ2NzdicpKSk7DQoJZWNobyB0cih0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2V4Y2x1 ZGlyJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS50ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9w cm9nbm9zdGljc19leGNsdWRpcicsICRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIsICcnLCcn LCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3N2JykpKTsNCgllY2hvIHRyKHRk YShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnaWdub3JlcycpLCAnIGNsYXNzPSJzbWRfbGFiZWwi JykudGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfaWdub3JlcycsICRzbWRf cHJvZ25vc3RpY3NfaWdub3JlcywgJycsJycsJycsNjApLnNwLnNtZF9wcm9nbm9zdGljc19n VHh0KCdjc3YnKSkpOw0KCWVjaG8gKCR3YXJubG9jKSA/IHRyKHRkKCcmbmJzcDsnKS50ZGEo JzxzdHJvbmc+Jy4kd2FybmxvYy4nPC9zdHJvbmc+JykpIDogJyc7DQoJZWNobyB0cih0ZGEo c21kX3Byb2dub3N0aWNzX2dUeHQoJ3Byb2dsb2MnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicp LnRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2RpcicsICRzbWRfcHJvZ25v c3RpY3NfZGlyLCAnJywnJywnJyw2MCkpKTsNCgllY2hvIHRyKHRkYShzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgncHJvZ3BmeCcpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykudGRhKGZJbnB1dCgn dGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfcHJlZml4JywgJHNtZF9wcm9nbm9zdGljc19wcmVm aXgsICcnLCcnLCcnLDYwKSkpOw0KCWVjaG8gdHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUp KTsNCgllY2hvICc8L2Zvcm0+JzsNCgllY2hvIGVuZFRhYmxlKCk7DQp9DQoNCi8vIC0tLS0t LS0tLS0gIFNlY3VyaXR5IGFkdmljZQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2Fkdmlj ZSgkbXNnPScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJv Z25vc3RpY3Nfc3R5bGUsICRwcmVmczsNCg0KCXBhZ2V0b3Aoc21kX3Byb2dub3N0aWNzX2dU eHQoJ3NtZF9wcm9nbm9zdGljcycpLCAkbXNnKTsNCglleHRyYWN0KHNtZF9wcm9nbm9zdGlj c19idXR0b25zKCkpOw0KDQoJJGNoZWNrcyA9IGFycmF5KCk7DQoNCgkvLyBQcm9nbm9zdGlj cyBkaXIgaW4gZG9jcm9vdD8NCglpZiAoc3RycG9zKGdldF9wcmVmKCdzbWRfcHJvZ25vc3Rp Y3NfZGlyJywgdHhwYXRoKSwgJHByZWZzWydwYXRoX3RvX3NpdGUnXSkgIT09IGZhbHNlKSB7 DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdkb2Nyb290X3Byb2dub3N0 aWNzJyk7DQoJfQ0KDQoJLy8gU2V0dXAgc3RpbGwgZXhpc3RzPw0KCWlmIChAaXNfZGlyKHR4 cGF0aCAuIERTLiAnc2V0dXAnKSkgew0KCQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnc2V0dXBfZXhpc3RzJyk7DQoJfQ0KDQoJLy8gRmlsZXMgZGlyIGluIGRvY3Jvb3Q/ DQoJaWYgKHN0cnBvcygkcHJlZnNbJ2ZpbGVfYmFzZV9wYXRoJ10sICRwcmVmc1sncGF0aF90 b19zaXRlJ10pICE9PSBmYWxzZSkgew0KCQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnZG9jcm9vdF9maWxlcycpOw0KCX0NCg0KCS8vIFRtcCBkaXIgaW4gZG9jcm9vdD8N CglpZiAoc3RycG9zKCRwcmVmc1sndGVtcGRpciddLCAkcHJlZnNbJ3BhdGhfdG9fc2l0ZSdd KSAhPT0gZmFsc2UpIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2Rv Y3Jvb3RfdG1wJyk7DQoJfQ0KDQovKg0KCS8vIFRPRE86IGNoZWNrIHdoYXQgU0hPVyBHUkFO VFMgcmV0dXJucyBhbmQgZGV0ZXJtaW5lIGlmIGl0IGNvdWxkIGJlIGEgc2VjdXJpdHkgcmlz aw0KCSRyZXMgPSBzYWZlX3F1ZXJ5KCdTSE9XIEdSQU5UUycpOw0KCWlmIChudW1Sb3dzKCRy ZXMpID4gMCkgew0KCQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc2hvd19n cmFudHMnKTsNCgl9DQoqLw0KDQoJLy8gRG9lcyB0aGlzIE15U1FMIHVzZXIgaGF2ZSBGSUxF UyBwcml2cz8NCgkkcmFuZGZpbGUgPSAkcHJlZnNbJ3RlbXBkaXInXS5EUy5yYW5kKCkudGlt ZSgpLicuc3FsJzsNCgkkcmVzID0gQHNhZmVfcXVlcnkoJ1NFTEVDVCBpZCBJTlRPIE9VVEZJ TEUgIicuJHJhbmRmaWxlLiciIEZJRUxEUyBURVJNSU5BVEVEIEJZICJcdCIgTElORVMgVEVS TUlOQVRFRCBCWSAiXG4iIEZST00gdHhwX2ltYWdlIFdIRVJFIDEgTElNSVQgMScpOw0KCWlm IChteXNxbF9lcnJvcigpID09ICcnKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGlj c19nVHh0KCdzcWxfZmlsZV9wcml2cycpOw0KCQlpZiAoaXNfZmlsZSgkcmFuZGZpbGUpKSB7 DQoJCQlAdW5saW5rKCRyYW5kZmlsZSk7DQoJCX0NCgl9DQoNCgllY2hvICc8c3R5bGUgdHlw ZT0idGV4dC9jc3MiPicuJHNtZF9wcm9nbm9zdGljc19zdHlsZVsnYWR2aWNlJ10uJHNtZF9w cm9nbm9zdGljc19zdHlsZVsnc2V0dXAnXS4nPC9zdHlsZT4nLnN0YXJ0VGFibGUoJ2xpc3Qn LCAnJywgJ3NtZF9wcm9nX2FkdmljZScpOw0KCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfcHJv Z25vc3RpY3NfZ1R4dCgndHRsX2FkdmljZScpKSkgLiB0ZGEoJGJ0blNldHVwLiRidG5GaWxl cy4kYnRuQWNrLCAkYnRuU3R5bGUpICk7DQoJaWYgKCRjaGVja3MpIHsNCgkJZm9yZWFjaCgk Y2hlY2tzIGFzICRjaGVjaykgew0KCQkJZWNobyB0cih0ZGEoJGNoZWNrKSk7DQoJCX0NCgl9 IGVsc2Ugew0KCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgndGlnaHQnKTsNCgl9DQoJZWNobyBl bmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tIEhhc2ggdGhlIGhhc2hmaWxlDQpmdW5j dGlvbiBzbWRfcHJvZ25vc3RpY3Nfc2VsZl9oYXNoKCkgew0KCWdsb2JhbCAkc21kX3Byb2du b3N0aWNzX2NoZWNrc3VtczsNCg0KCWlmIChmaWxlX2V4aXN0cygkc21kX3Byb2dub3N0aWNz X2NoZWNrc3VtcykpIHsNCgkJJGNvbnRlbnQgPSBzbWRfcHJvZ25vc3RpY3NfcHJlcF9maWxl KCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKTsNCgkJJGhhc2ggPSBtZDUoJGNvbnRlbnQp Ow0KCX0gZWxzZSB7DQoJCSRoYXNoID0gTlVMTDsNCgl9DQoJc2V0X3ByZWYoJ3NtZF9wcm9n bm9zdGljc19zdW1oYXNoJywgJGhhc2gsICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAn dGV4dF9pbnB1dCcpOw0KfQ0KDQovLyAtLS0tLS0tLS0tIENvbXBpbGUgbGlzdCBvZiBmaWxl cyB0byBtb25pdG9yDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfcmVhZGZpbGVzKCkgew0K CSRmaWxlbGlzdCA9IGFycmF5KCk7DQoNCgkkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MgPSBn ZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MnLCAnJyk7DQoJJHNtZF9wcm9nbm9z dGljc19leGNsdWRpciA9IGRvX2xpc3QoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19leGNs dWRpcicsICcnKSk7DQoJJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzID0gZ2V0X3ByZWYoJ3Nt ZF9wcm9nbm9zdGljc19pZ25vcmVzJywgJycpOw0KCWlmICgkc21kX3Byb2dub3N0aWNzX2xp c3Rsb2MpIHsNCgkJZm9yZWFjaCAoZG9fbGlzdCgkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2Mp IGFzICRsb2MpIHsNCgkJCS8vIE5PVEU6IG5vdCB1c2luZyBHTE9CX0JSQUNFIHRvIGdyYWIg cmVndWxhciBhbmQgZG90IGZpbGVzLCBzaW5jZSBpdCdzIG5vdCBhbHdheXMgYXZhaWxhYmxl IGNyb3NzLU9TDQoJCQkkZmlsZWxpc3QgPSBhcnJheV9tZXJnZSgkZmlsZWxpc3QsIHNtZF9w cm9nbm9zdGljc19yZ2xvYigiKiIsIEdMT0JfTUFSSywgJGxvYywgJHNtZF9wcm9nbm9zdGlj c19leGNsdWRpciwgJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzKSwgc21kX3Byb2dub3N0aWNz X3JnbG9iKCIuKiIsIEdMT0JfTUFSSywgJGxvYywgJHNtZF9wcm9nbm9zdGljc19leGNsdWRp ciwgJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzKSk7DQoJCX0NCgl9DQoJcmV0dXJuICRmaWxl bGlzdDsNCn0NCg0KLy8gLS0tLS0tLS0tLSBQcmVwYXJlIGZpbGUgY29udGVudHMgZm9yIG1k NS4gQXNzdW1lcyBmaWxlIGV4aXN0cw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3ByZXBf ZmlsZSgkZmlsZSkgew0KCSRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOw0K CSRjb250ZW50ID0gc3RyX3JlcGxhY2UoJyQnLidIZWFkVVJMOiBodHRwOicsICckJy4nSGVh ZFVSTDogaHR0cHM6Jywgc3RyX3JlcGxhY2UoIlxyXG4iLCAiXG4iLCAkY29udGVudCkpOw0K CXJldHVybiAkY29udGVudDsNCn0NCgkNCi8vIEZyYW5rZW5zdGVpbmVkIGZyb20gaHR0cDov L3NuaXBwbHIuY29tL3ZpZXcvMTYyMzMvcmVjdXJzaXZlLWdsb2IvDQpmdW5jdGlvbiBzbWRf cHJvZ25vc3RpY3Nfcmdsb2IoJHBhdHRlcm4sICRmbGFncz0wLCAkcGF0aD0nJywgJGV4Y2w9 YXJyYXkoKSwgJGlnbj0nJykgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3Vt czsNCg0KCS8vIEFkZCBhbnkgZmlsZXMgdG8gcGVybWFuZW50bHkgZXhjbHVkZSBoZXJlIChO T1QgZGlyczogdGhleSdyZSBpZ25vcmVkIGF1dG9tYXRpY2FsbHkpDQoJJGlnbmFyciA9ICgk aWduKSA/IGRvX2xpc3QoJGlnbikgOiBhcnJheSgpOw0KCSRwZXJtZXhjbHVkZSA9IGFycmF5 X21lcmdlKGFycmF5KGJhc2VuYW1lKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKSksICRp Z25hcnIpOw0KDQoJaWYgKCEkcGF0aCAmJiAoJGRpciA9IGRpcm5hbWUoJHBhdHRlcm4pKSAh PSAnLicpIHsNCgkJaWYgKCRkaXIgPT0gJ1xcJyB8fCAkZGlyID09IERTKSAkZGlyID0gJyc7 DQoJCXJldHVybiBzbWRfcHJvZ25vc3RpY3Nfcmdsb2IoYmFzZW5hbWUoJHBhdHRlcm4pLCAk ZmxhZ3MsICRkaXIgLiBEUywgJGV4Y2wsICRpZ24pOw0KCX0NCgkkcGF0aHMgPSBnbG9iKCRw YXRoIC4gJyonLCBHTE9CX09OTFlESVIgfCBHTE9CX05PU09SVCk7DQoJJGZpbGVzID0gZ2xv YigkcGF0aCAuICRwYXR0ZXJuLCAkZmxhZ3MpOw0KCWZvcmVhY2ggKCRwYXRocyBhcyAkcCkg ew0KCQkkcGluZm8gPSBhcnJheV9wb3AoZXhwbG9kZShEUywgJHApKTsNCgkJaWYgKCFpbl9h cnJheSgkcGluZm8sICRleGNsKSkgew0KCQkJJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZpbGVz LCBzbWRfcHJvZ25vc3RpY3Nfcmdsb2IoJHBhdHRlcm4sICRmbGFncywgJHAgLiBEUywgJGV4 Y2wsICRpZ24pKTsNCgkJCWZvcmVhY2goJGZpbGVzIGFzICRpZHggPT4gJHRoZUZpbGUpIHsN CgkJCQkkZmV4ID0gYXJyYXlfcG9wKGV4cGxvZGUoRFMsICR0aGVGaWxlKSk7DQoJCQkJaWYo JGZleD09JycgfHwgaW5fYXJyYXkoJGZleCwgJHBlcm1leGNsdWRlKSkgew0KCQkJCQl1bnNl dCgkZmlsZXNbJGlkeF0pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gJGZpbGVz Ow0KfQ0KDQovLyBGb3JtYXQgZm9yZW5zaWMgZGF0YSBmb3IgYSBmaWxlDQpmdW5jdGlvbiBz bWRfcHJvZ25vc3RpY3NfZm9yZW5zaWNfb3V0cHV0KCRmaWxlLCAkZmkpIHsNCglnbG9iYWwg JHByZWZzOw0KDQoJJGRmb3JtID0gJHByZWZzWydkYXRlZm9ybWF0J107DQoJJHNlcCA9IG47 DQoJJG91dCA9ICcnOw0KDQoJJG91dCAuPSAkc2VwIC4gc21kX3Byb2dub3N0aWNzX2dUeHQo J3N0YXRfbmFtZScpIC4gJGZpbGU7DQoJJG91dCAuPSAkc2VwIC4gc21kX3Byb2dub3N0aWNz X2dUeHQoJ3N0YXRfc2l6ZScpIC4gJGZpWydzaXplJ107DQoJJG91dCAuPSAkc2VwIC4gc21k X3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfbW9kJykgLiBzdHJmdGltZSgkZGZvcm0sICRmaVsn bXRpbWUnXSk7DQoJJG91dCAuPSAkc2VwIC4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRf dWlkJykgLiAkZmlbJ3VpZCddOw0KCSRvdXQgLj0gJHNlcCAuIHNtZF9wcm9nbm9zdGljc19n VHh0KCdzdGF0X2dpZCcpIC4gJGZpWydnaWQnXTsNCg0KCXJldHVybiAkb3V0Ow0KfQ0KDQov LyBDb21tb24gYnV0dG9ucw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2J1dHRvbnMoKSB7 DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3Nfc3R5 bGU7DQoNCgkkcmV0ID0gYXJyYXkgKA0KCQknYnRuU2F2ZScgPT4gZklucHV0KCdzdWJtaXQn LCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpLA0KCQknYnRuQWNrJyA9PiAn PGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3Nf ZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNrJiMzODtzbWRfcHJvZ25vc3Rp Y3Nfc3VwcHJlc3M9MSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfcHJvZ25v c3RpY3NfZ1R4dCgncG5sX2FjaycpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JywNCgkJJ2J0 bkFja0l0JyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgncG5sX2Fja2l0JyksICdwdWJsaXNoJyksDQoJCSdidG5DU0knID0+IGZJbnB1dCgn c3VibWl0JywgJ2NzaScsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfY3NpJyksICdwdWJs aXNoJyksDQoJCSdidG5BZHZpY2UnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0i P2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9z dGljc19hZHZpY2UiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3Byb2dub3N0 aWNzX2dUeHQoJ3BubF9hZHZpY2UnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdi dG5GaWxlcycgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21k X3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2ZpbGVzIj4n LmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxf ZmlsZXMnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TZXR1cCcgPT4gJzxm b3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2 ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX3NldHVwIj4nLmZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfc2V0dXAnKSwgJ3NtYWxs ZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TdHlsZScgPT4gJyBjbGFzcz0ic21kX3Byb2df YnRucyIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4OyInLA0KCQknYnRuQ1NTJyA9PiAn PHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ3NldHVw J10uJzwvc3R5bGU+JywNCgkpOw0KCXJldHVybiAkcmV0Ow0KfQ0KDQovLyBNdWx0aS1maWxl IGRyb3Bkb3duIHNlbGVjdGlvbg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX211bHRpc2Vs KCRzZWxuYW1lPScnLCAkdHJlZT1hcnJheSgpLCAkc2VsPWFycmF5KCkpIHsNCgkkb3V0W10g PSAnPHNlbGVjdCBpZD0iJy4kc2VsbmFtZS4nIiBuYW1lPSInLiRzZWxuYW1lLidbXSIgY2xh c3M9Imxpc3QiIHN0eWxlPSJoZWlnaHQ6NDAwcHg7IiBtdWx0aXBsZT0ibXVsdGlwbGUiPic7 DQoJZm9yZWFjaCAoJHRyZWUgYXMgJGxlYWYpIHsNCgkJJHNlbGVjdGVkPScnOw0KCQlpZiAo aW5fYXJyYXkoJGxlYWYsICRzZWwpKSB7DQoJCQkkc2VsZWN0ZWQgPSAnIHNlbGVjdGVkPSJz ZWxlY3RlZCInOw0KCQl9DQoNCgkJJG91dFtdID0gdC4nPG9wdGlvbicuJHNlbGVjdGVkLic+ Jy5odG1sc3BlY2lhbGNoYXJzKCRsZWFmKS4nPC9vcHRpb24+Jy5uOw0KCX0NCgkkb3V0W10g PSAnPC9zZWxlY3Q+JzsNCglyZXR1cm4gam9pbignJywkb3V0KTsNCn0NCg0KLy8gUGFzc3dv cmQgc3RyZW5ndGggbWV0ZXINCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19jaHJvbm9zdHJl bmd0aCgkZXZ0LCAkc3RwKSB7DQoJZ2xvYmFsICRldmVudCwgJHNtZF9wcm9nbm9zdGljc19z dHlsZTsNCg0KCWlmICgkZXZlbnQgIT0gJ2FkbWluJykgew0KCQlyZXR1cm4gZmFsc2U7DQoJ fQ0KDQoJZWNobyA8PDxFT1MNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+eyRzbWRfcHJvZ25v c3RpY3Nfc3R5bGVbJ21ldGVyJ119PC9zdHlsZT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZh c2NyaXB0Ij4NCi8vPCFbQ0RBVEFbDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKg0KKiogICBGcmFua2Vuc3Rl aW5lZCBmcm9tIGFuIG9yaWdpbmFsIChHUEwpIHNjcmlwdA0KKiogICBieSBTbWFsbCBIYWRy b24gQ29sbGlkZXIgLS0gVGhhbmtzIQ0KKiogICBodHRwOi8vd3d3LnNtYWxsaGFkcm9uY29s bGlkZXIuY29tDQoqKg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLw0KLy8gVXNhZ2U6IFBhc3MgdGhlIHBhc3N3b3Jk IHN0cmluZyB0byBwYXNzd29yZFN0cmVuZ3RoIGFuZCBzdHJpbmcgd2l0aCB0aW1lIGl0IHdp bGwgdGFrZSBpcyByZXR1cm5lZA0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2dUeHQod2hh dCkgew0KCXZhciBsYW5nID0gbmV3IEFycmF5KCk7DQoJbGFuZ1snYWJvdXQnXSA9ICdhYm91 dCAnOw0KCWxhbmdbJ2RpZ2l0c2VwJ10gPSAnLCc7DQoJbGFuZ1sncGx1cmFsJ10gPSAncyc7 DQoJbGFuZ1sncHdfY29tbW9uJ10gPSAnb25lIG9mIHRoZSA1MDAgbW9zdCBjb21tb24gcGFz c3dvcmRzJzsNCglsYW5nWydwd19wb3N0YW1ibGUnXSA9ICdJdCB3b3VsZCBiZSBjcmFja2Vk IGFsbW9zdCBpbnN0YW50bHknOw0KCWxhbmdbJ3B3X3ByZWFtYmxlJ10gPSAnWW91ciBwYXNz d29yZCBpcyc7DQoJbGFuZ1sncHdfdGFrZSddID0gJ0l0IHdvdWxkIHRha2UnOw0KCWxhbmdb J3B3X2NyYWNrJ10gPSAnZm9yIGEgZGVza3RvcCBQQyB0byBjcmFjayB5b3VyIHBhc3MgYnkg YnJ1dGUgZm9yY2U8YnIgLz4odW5sZXNzIHlvdSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nv bi5jb20vYmxvZy9jaG9vc2luZy1hLWJyaWxsaWFudC1wYXNzd29yZC8iPmJyb2tlIHRoZSBy dWxlczwvYT4sIGluIHdoaWNoIGNhc2UgaXRcJ2QgYmUgY3JhY2tlZCBhbG1vc3QgaW5zdGFu dGx5KSc7DQoJbGFuZ1snc2VjcyddID0gJyBzZWNvbmRzJzsNCglsYW5nWyd0X3NlYyddID0g J3NlY29uZCc7DQoJbGFuZ1sndF9taW4nXSA9ICdtaW51dGUnOw0KCWxhbmdbJ3RfaHInXSA9 ICdob3VyJzsNCglsYW5nWyd0X2RheSddID0gJ2RheSc7DQoJbGFuZ1sndF95ciddID0gJ3ll YXInOw0KCWxhbmdbJ3RfdGhvX3knXSA9ICd0aG91c2FuZCB5ZWFycyc7DQoJbGFuZ1sndF9t aWxfeSddID0gJ21pbGxpb24geWVhcnMnOw0KCWxhbmdbJ3RfYmlsX3knXSA9ICdiaWxsaW9u IHllYXJzJzsNCglsYW5nWyd0X3RyaV95J10gPSAndHJsbGlvbiB5ZWFycyc7DQoJbGFuZ1sn dF9xdWFfeSddID0gJ3F1YWRyaWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X3F1aV95J10gPSAn cXVpbnRpbGxpb24geWVhcnMnOw0KCWxhbmdbJ3Rfc2V4X3knXSA9ICdzZXh0aWxsaW9uIHll YXJzJzsNCglsYW5nWyd0X3NlcF95J10gPSAnc2VwdGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sn dF9vY3RfeSddID0gJ29jdGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9ub25feSddID0gJ25v bmlsbGlvbiB5ZWFycyc7DQoJcmV0dXJuIGxhbmdbd2hhdF07DQp9DQoNCmZ1bmN0aW9uIHNt ZF9wcm9nX2Nocm9ub1N0cmVuZ3RoKHB3KSB7DQoJdmFyIHNpemUgPSBwdy5sZW5ndGg7DQoJ dmFyIHNtZF9wcm9nX2NvbW1vbl9wdyA9IG5ldyBBcnJheSgpOw0KCXZhciBwcmVjaXNpb24g PSA3Ow0KCXNtZF9wcm9nX2NvbW1vbl9wd1szXSA9IFsnZ29kJywnc2V4J107DQoJc21kX3By b2dfY29tbW9uX3B3WzRdID0gWycxMjM0JywnY29vbCcsJzEzMTMnLCdzdGFyJywnZ29sZics J2JlYXInLCdkYXZlJywncGFzcycsJ2FhYWEnLCc2OTY5JywnamFrZScsJ21hdHQnLCcxMjEy JywnZmlzaCcsJ2Z1Y2snLCdwb3JuJywnNDMyMScsJzIwMDAnLCc0MTI4JywndGVzdCcsJ3No aXQnLCdsb3ZlJywnYmFieScsJ2N1bnQnLCdtYXJrJywnMzMzMycsJ2pvaG4nLCdzZXh5Jywn NTE1MCcsJzQ0NDQnLCcyMTEyJywnZnJlZCcsJ21pa2UnLCcxMTExJywndGl0cycsJ3BhdWwn LCdtaW5lJywna2luZycsJ2ZpcmUnLCc1NTU1Jywnc2x1dCcsJ2dpcmwnLCcyMjIyJywnYXNk ZicsJ3RpbWUnLCc3Nzc3Jywncm9jaycsJ3h4eHgnLCdmb3JkJywnZGljaycsJ2JpbGwnLCd3 b2xmJywnYmx1ZScsJ2FsZXgnLCdjb2NrJywnYmVlcicsJ2VyaWMnLCc2NjY2JywnamFjaydd Ow0KCXNtZF9wcm9nX2NvbW1vbl9wd1s1XSA9IFsnYmVhY2gnLCdncmVhdCcsJ2JsYWNrJywn cHVzc3knLCcxMjM0NScsJ2ZyYW5rJywndGlnZXInLCdqYXBhbicsJ21vbmV5JywnbmFrZWQn LCcxMTExMScsJ2FuZ2VsJywnc3RhcnMnLCdhcHBsZScsJ3Bvcm5vJywnc3RldmUnLCd2aXBl cicsJ2hvcm55Jywnb3U4MTInLCdrZXZpbicsJ2J1ZGR5JywndGVlbnMnLCd5b3VuZycsJ2ph c29uJywnbHVja3knLCdnaXJscycsJ2xvdmVyJywnYnJpYW4nLCdraXR0eScsJ2J1YmJhJywn aGFwcHknLCdjcmVhbScsJ2phbWVzJywneHh4eHgnLCdib290eScsJ2tlbGx5JywnYm9vYnMn LCdwZW5pcycsJ2VhZ2xlJywnd2hpdGUnLCdlbnRlcicsJ2NoZXZ5Jywnc21pdGgnLCdjaHJp cycsJ2dyZWVuJywnc2FtbXknLCdzdXBlcicsJ21hZ2ljJywncG93ZXInLCdlbmpveScsJ3Nj b3R0JywnZGF2aWQnLCd2aWRlbycsJ3F3ZXJ0JywncGFyaXMnLCd3b21lbicsJ2p1aWNlJywn ZGlydHknLCdtdXNpYycsJ3BldGVyJywnYml0Y2gnLCdob3VzZScsJ2hlbGxvJywnYmlsbHkn LCdtb3ZpZSddOw0KCXNtZF9wcm9nX2NvbW1vbl9wd1s2XSA9IFsnMTIzNDU2JywncHJpbmNl JywnZ3VpdGFyJywnYnV0dGVyJywnamFndWFyJywndW5pdGVkJywndHVydGxlJywnbXVmZmlu JywnY29vcGVyJywnbmFzY2FyJywncmVkc294JywnZHJhZ29uJywnenhjdmJuJywncXdlcnR5 JywndG9tY2F0JywnNjk2OTY5JywnNjU0MzIxJywnbXVycGh5JywnOTg3NjU0JywnYW1hbmRh JywnYnJhemlsJywnd2l6YXJkJywnaGFubmFoJywnbGF1cmVuJywnbWFzdGVyJywnZG9jdG9y JywnZWFnbGUxJywnZ2F0b3JzJywnc3F1aXJ0Jywnc2hhZG93JywnbWlja2V5JywnbW90aGVy JywnbW9ua2V5JywnYmFpbGV5JywnanVuaW9yJywnbmF0aGFuJywnYWJjMTIzJywna25pZ2h0 JywnYWxleGlzJywnaWNlbWFuJywnZnVja21lJywndGlnZXJzJywnYmFkYm95JywnYm9ubmll JywncHVycGxlJywnZGViYmllJywnYW5nZWxhJywnam9yZGFuJywnYW5kcmVhJywnc3BpZGVy JywnaGFybGV5JywncmFuZ2VyJywnZGFrb3RhJywnYm9vZ2VyJywnaXdhbnR1JywnYWFhYWFh JywnbG92ZXJzJywncGxheWVyJywnZmx5ZXJzJywnc3Vja2l0JywnaHVudGVyJywnYmVhdmVy JywnbW9yZ2FuJywnbWF0cml4JywnYm9vbWVyJywncnVubmVyJywnYmF0bWFuJywnc2Nvb2J5 JywnZWR3YXJkJywndGhvbWFzJywnd2FsdGVyJywnaGVscG1lJywnZ29yZG9uJywndGlnZ2Vy JywnamFja2llJywnY2FzcGVyJywncm9iZXJ0JywnYm9vYm9vJywnYm9zdG9uJywnbW9uaWNh Jywnc3R1cGlkJywnYWNjZXNzJywnY29mZmVlJywnYnJhdmVzJywneHh4eHh4JywneWFua2Vl Jywnc2F0dXJuJywnYnVzdGVyJywnZ2VtaW5pJywnYmFybmV5JywnYXBwbGVzJywnc29jY2Vy JywncmFiYml0JywndmljdG9yJywnYXVndXN0JywnaG9ja2V5JywncGVhbnV0JywndHVja2Vy Jywna2lsbGVyJywnY2FuYWRhJywnZ2VvcmdlJywnam9obm55Jywnc2llcnJhJywnYmxhemVy JywnYW5kcmV3Jywnc3Bhbmt5JywnZG9nZ2llJywnMjMyMzIzJywnd2ludGVyJywnenp6enp6 JywnYnJhbmR5JywnZ3VubmVyJywnYmVhdmlzJywnY29tcGFxJywnaG9ybmV5JywnMTEyMjMz JywnY2FybG9zJywnYXJ0aHVyJywnZGFsbGFzJywndGVubmlzJywnc29waGllJywnbGFkaWVz JywnY2FsdmluJywnc2hhdmVkJywncGVwcGVyJywnZ2lhbnRzJywnc3VyZmVyJywnZmVuZGVy Jywnc2Ftc29uJywnYXVzdGluJywnbWVtYmVyJywnYmxvbmRlJywnYmxvd21lJywnZnVja2Vk JywnZGFuaWVsJywnZG9uYWxkJywnZ29sZGVuJywnZ29sZmVyJywnY29va2llJywnc3VtbWVy JywnYnJvbmNvJywncmFjaW5nJywnc2FuZHJhJywnaGFtbWVyJywncG9va2llJywnam9zZXBo JywnaGVudGFpJywnam9zaHVhJywnZGlhYmxvJywnYmlyZGllJywnbWFnZ2llJywnc2V4c2V4 JywnbGl0dGxlJywnYml0ZW1lJywnNjY2NjY2JywndG9wZ3VuJywnYXNobGV5Jywnd2lsbGll Jywnc3RpY2t5JywnY293Ym95JywnYW5pbWFsJywnc2lsdmVyJywneWFtYWhhJywncWF6d3N4 JywnZnVja2VyJywnanVzdGluJywnc2tpcHB5Jywnb3JhbmdlJywnYmFuYW5hJywnbGFrZXJz JywnbWFydmluJywnbWVybGluJywnZHJpdmVyJywncmFjaGVsJywnbWFyaW5lJywnc2xheWVy JywnYW5nZWxzJywnYXNkZmdoJywnYmlnZG9nJywndmFnaW5hJywnYXBvbGxvJywnY2hlZXNl JywndG95b3RhJywncGFya2VyJywnbWFkZG9nJywndHJhdmlzJywnMTIxMjEyJywnbG9uZG9u JywnaG90ZG9nJywnd2lsc29uJywnc3lkbmV5JywnbWFydGluJywnZGVubmlzJywndm9vZG9v JywnZ2luZ2VyJywnbWFnbnVtJywnYWN0aW9uJywnbmljb2xlJywnY2FydGVyJywnZXJvdGlj Jywnc3Bhcmt5JywnamFzcGVyJywnNzc3Nzc3JywneWVsbG93Jywnc21va2V5JywnZHJlYW1z JywnY2FtYXJvJywneGF2aWVyJywndGVyZXNhJywnZnJlZGR5Jywnc2VjcmV0Jywnc3RldmVu JywnamVyZW15JywndmlraW5nJywnZmFsY29uJywnc25vb3B5JywncnVzc2lhJywndGF5bG9y JywnbmlwcGxlJywnMTExMTExJywnZWFnbGVzJywnMTMxMzEzJywnd2lubmVyJywndGVzdGVy JywnMTIzMTIzJywnbWlsbGVyJywncm9ja2V0JywnbGVnZW5kJywnZmxvd2VyJywndGhlbWFu JywncGxlYXNlJywnb2xpdmVyJywnYWxiZXJ0J107DQoJc21kX3Byb2dfY29tbW9uX3B3Wzdd ID0gWydwb3JzY2hlJywncm9zZWJ1ZCcsJ2NoZWxzZWEnLCdhbWF0ZXVyJywnNzc3Nzc3Nycs J2RpYW1vbmQnLCd0aWZmYW55JywnamFja3NvbicsJ3Njb3JwaW8nLCdjYW1lcm9uJywndGVz dGluZycsJ3NoYW5ub24nLCdtYWRpc29uJywnbXVzdGFuZycsJ2JvbmQwMDcnLCdsZXRtZWlu JywnbWljaGFlbCcsJ2dhdGV3YXknLCdwaG9lbml4JywndGh4MTEzOCcsJ3JhaWRlcnMnLCdm b3JldmVyJywncGVhY2hlcycsJ2phc21pbmUnLCdtZWxpc3NhJywnZ3JlZ29yeScsJ2Nvd2Jv eXMnLCdkb2xwaGluJywnY2hhcmxlcycsJ2N1bXNob3QnLCdjb2xsZWdlJywnYnVsbGRvZycs JzEyMzQ1NjcnLCduY2MxNzAxJywnZ2FuZGFsZicsJ2xlYXRoZXInLCdjdW1taW5nJywnaHVu dGluZycsJ2NoYXJsaWUnLCdyYWluYm93JywnYXNzaG9sZScsJ2JpZ2NvY2snLCdmdWNreW91 JywnamVzc2ljYScsJ3BhbnRpZXMnLCdqb2huc29uJywnbmF1Z2h0eScsJ2JyYW5kb24nLCdh bnRob255Jywnd2lsbGlhbScsJ2ZlcnJhcmknLCdjaGlja2VuJywnaGVhdGhlcicsJ2NoaWNh Z28nLCd2b3lhZ2VyJywneWFua2VlcycsJ3JhbmdlcnMnLCdwYWNrZXJzJywnbmV3eW9yaycs J3Ryb3VibGUnLCdiaWd0aXRzJywnd2luc3RvbicsJ3RodW5kZXInLCd3ZWxjb21lJywnYml0 Y2hlcycsJ3dhcnJpb3InLCdwYW50aGVyJywnYnJvbmNvcycsJ3JpY2hhcmQnLCc4Njc1MzA5 JywncHJpdmF0ZScsJ3p4Y3Zibm0nLCduaXBwbGVzJywnYmxvbmRlcycsJ2Zpc2hpbmcnLCdt YXR0aGV3JywnaG9vdGVycycsJ3BhdHJpY2snLCdmcmVlZG9tJywnZnVja2luZycsJ2V4dHJl bWUnLCdibG93am9iJywnY2FwdGFpbicsJ2JpZ2RpY2snLCdhYmdydHl1JywnY2hlc3Rlcics J21vbnN0ZXInLCdtYXh3ZWxsJywnYXJzZW5hbCcsJ2NyeXN0YWwnLCdyZWJlY2NhJywncHVz c2llcycsJ2Zsb3JpZGEnLCdwaGFudG9tJywnc2Nvb3RlcicsJ3N1Y2Nlc3MnXTsNCglzbWRf cHJvZ19jb21tb25fcHdbOF0gPSBbJ2ZpcmViaXJkJywncGFzc3dvcmQnLCcxMjM0NTY3OCcs J3N0ZWVsZXJzJywnbW91bnRhaW4nLCdjb21wdXRlcicsJ2Jhc2ViYWxsJywneHh4eHh4eHgn LCdmb290YmFsbCcsJ3F3ZXJ0eXVpJywnamVubmlmZXInLCdkYW5pZWxsZScsJ3N1bnNoaW5l Jywnc3RhcndhcnMnLCd3aGF0ZXZlcicsJ25pY2hvbGFzJywnc3dpbW1pbmcnLCd0cnVzdG5v MScsJ21pZG5pZ2h0JywncHJpbmNlc3MnLCdzdGFydHJlaycsJ21lcmNlZGVzJywnc3VwZXJt YW4nLCdiaWdkYWRkeScsJ21hdmVyaWNrJywnZWluc3RlaW4nLCdkb2xwaGlucycsJ2hhcmRj b3JlJywncmVkd2luZ3MnLCdjb2NhY29sYScsJ21pY2hlbGxlJywndmljdG9yaWEnLCdjb3J2 ZXR0ZScsJ2J1dHRoZWFkJywnbWFybGJvcm8nLCdzcmluaXZhcycsJ2ludGVybmV0JywncmVk c2tpbnMnLCcxMTExMTExMScsJ2FjY2VzczE0JywncnVzaDIxMTInLCdzY29ycGlvbicsJ2ls b3ZleW91Jywnc2FtYW50aGEnLCdtaXN0cmVzcyddOw0KDQoJLy8gQ2hlY2sgcHcgYWdhaW5z dCBjb21tb24gcGFzc3dvcmRzIG9mIHRoYXQgbGVuZ3RoIHRvIHNlZSBpZiBpdCdzIGluIHRv cCA1MDANCglpZiAoc2l6ZSA+IDIgJiYgc2l6ZSA8IDkpIHsNCgkJdmFyIHdpZHRoID0gc21k X3Byb2dfY29tbW9uX3B3W3NpemVdLmxlbmd0aDsNCgkJZm9yICh2YXIgaWR4PTA7IGlkeCA8 IHdpZHRoOyBpZHgrKykgew0KCQkJaWYgKHB3LnRvTG93ZXJDYXNlKCkgPT0gc21kX3Byb2df Y29tbW9uX3B3W3NpemVdW2lkeF0pIHsNCgkJCQlyZXR1cm4gLTE7DQoJCQl9DQoJCX0NCgl9 DQoNCgkvLyBDYWxjdWxhdGlvbnMgcGVyIHNlY29uZC4gVGVuIG1pbGxpb24gaXMgcm91Z2hs eSB0aGUgbnVtYmVyIGEgZGVjZW50IFBDIGNvdWxkIG1hbmFnZSB1bmluaGliaXRlZCBpbiAy MDEwLg0KCS8vIEF1dG9tYXRpY2FsbHkgZG91YmxlZCBldmVyeSAxOCBtb250aHMgYWNjb3Jk aW5nIHRvIE1vb3JlJ3MgbGF3LCBhbW9ydGlzZWQgYnkgbW9udGgNCgl2YXIgY2FsY3NQZXJT ZWMgPSAxMDAwMDAwMDsNCgl2YXIgZHQgPSBuZXcgRGF0ZSgpOw0KCXZhciBiYXNlWWVhciA9 ICcyMDEwJzsNCgl2YXIgdGhpc1llYXIgPSBkdC5nZXRGdWxsWWVhcigpOw0KCXZhciB0aGlz TW9udGggPSBkdC5nZXRNb250aCgpOyAvLyAwLTExDQoJdmFyIG1vbnRoc1NpbmNlQmFzZSA9 ICgodGhpc1llYXIgLSBiYXNlWWVhcikgKiAxMikgKyB0aGlzTW9udGg7DQoJdmFyIG1vb3Jl UGVyaW9kcyA9IE1hdGguZmxvb3IobW9udGhzU2luY2VCYXNlIC8gMTgpICsgMTsNCgljYWxj c1BlclNlYyAqPSBtb29yZVBlcmlvZHM7DQoJdmFyIGluY3JlbWVudFBlck1vbnRoID0gY2Fs Y3NQZXJTZWMgLyAxODsgLy8gSG93IG1hbnkgY2FsY3MgaXQgZ29lcyB1cCBieSBpbiB0aGlz IE1vb3JlIHBlcmlvZCwgcGVyIG1vbnRoDQoJY2FsY3NQZXJTZWMgKz0gKGluY3JlbWVudFBl ck1vbnRoICogKG1vbnRoc1NpbmNlQmFzZSUxOCkpOw0KDQoJLy8gS2VlcCB0cmFjayBvZiBo b3cgbWFueSBjaGFyYWN0ZXIgc2V0cyBhcmUgdXNlZA0KCXZhciBwb3NzQ2hhcnMgPSAwOw0K CS8vIExvd2VyY2FzZQ0KCWlmIChwdy5tYXRjaCgvW2Etel0vKSkgeyBwb3NzQ2hhcnMgKz0g MjY7IH0NCgkvLyBVcHBlcmNhc2UNCglpZiAocHcubWF0Y2goL1tBLVpdLykpIHsgcG9zc0No YXJzICs9IDI2OyB9DQoJLy8gTnVtYmVycw0KCWlmIChwdy5tYXRjaCgvXGQrLykpIHsgcG9z c0NoYXJzICs9IDEwOyB9DQoJLy8gU3ltYm9scw0KCWlmIChwdy5tYXRjaCgvWyEsQCwjLMKj LCQs4oKsLMKlLCUsXiwmLCosKyw9LD8sXyx+LFwtLCgsKSw8LD4sXCwsXC4sXFssXF0sXHss XH0sXHwsXDosXDssXCcsXCIsXGAsXC8sXFxcLFzCrF0vKSApIHtwb3NzQ2hhcnMgKz0gMzZ9 Ow0KDQoJLy8gV29yayBvdXQgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnM6 IHBvc3NpYmxlIGNoYXJhY3RlcnMgdG8gdGhlIHBvd2VyIG9mIHRoZSBwYXNzd29yZCBsZW5n dGgNCgl2YXIgcG9zc0NvbWJvcyA9IE1hdGgucG93KHBvc3NDaGFycywgc2l6ZSk7DQoNCgkv LyBEaXZpZGUgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYnkgdGhlIGNh bGN1bGF0aW9ucyBhIFBDIGNhbiBkbyBwZXIgc2Vjb25kDQoJdmFyIGNyYWNrVGltZUluU2Vj cyA9IHBvc3NDb21ib3MgLyBjYWxjc1BlclNlYzsNCg0KCS8vIFNldCB1cCBhbiBhcnJheSBv ZiBwZXJpb2RzIHdpdGggdGhlaXIgbGVuZ3RocyBpbiBzZWNvbmRzDQoJdmFyIHNtZF9wZXJp b2RzID0gbmV3IEFycmF5KCk7DQoJc21kX3BlcmlvZHNbJ3RfbWluJ10gPSA2MDsNCglzbWRf cGVyaW9kc1sndF9ociddID0gc21kX3BlcmlvZHNbJ3RfbWluJ10gKiA2MDsNCglzbWRfcGVy aW9kc1sndF9kYXknXSA9IHNtZF9wZXJpb2RzWyd0X2hyJ10gKiAyNDsNCglzbWRfcGVyaW9k c1sndF95ciddID0gc21kX3BlcmlvZHNbJ3RfZGF5J10gKiAzNjUuMjU7DQoJc21kX3Blcmlv ZHNbJ3RfdGhvX3knXSA9IHNtZF9wZXJpb2RzWyd0X3lyJ10gKiAxMDAwOw0KCXNtZF9wZXJp b2RzWyd0X21pbF95J10gPSBzbWRfcGVyaW9kc1sndF90aG9feSddICogMTAwMDsNCglzbWRf cGVyaW9kc1sndF9iaWxfeSddID0gc21kX3BlcmlvZHNbJ3RfbWlsX3knXSAqIDEwMDA7DQoJ c21kX3BlcmlvZHNbJ3RfdHJpX3knXSA9IHNtZF9wZXJpb2RzWyd0X2JpbF95J10gKiAxMDAw Ow0KCXNtZF9wZXJpb2RzWyd0X3F1YV95J10gPSBzbWRfcGVyaW9kc1sndF90cmlfeSddICog MTAwMDsNCglzbWRfcGVyaW9kc1sndF9xdWlfeSddID0gc21kX3BlcmlvZHNbJ3RfcXVhX3kn XSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3Rfc2V4X3knXSA9IHNtZF9wZXJpb2RzWyd0X3F1 aV95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3NlcF95J10gPSBzbWRfcGVyaW9kc1sn dF9zZXhfeSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9vY3RfeSddID0gc21kX3Blcmlv ZHNbJ3Rfc2VwX3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3Rfbm9uX3knXSA9IHNtZF9w ZXJpb2RzWyd0X29jdF95J10gKiAxMDAwOw0KDQoJLy8gUGVyaW9kIHR5cGUgaXMgJ3NlY29u ZHMnIGJ5IGRlZmF1bHQNCgl2YXIgcGVyaW9kVHlwZSA9ICd0X3NlYyc7DQoJdmFyIHN0cmVu Z3RoID0gJyc7DQoNCgkvLyBJZiBpdCB3aWxsIHRha2UgbGVzcyB0aGFuIGEgc2Vjb25kIHRv IGNyYWNrIHRoZSBwYXNzd29yZCwgc2hvdyBleGFjdGx5IGhvdyBsb25nDQoJaWYgKGNyYWNr VGltZUluU2VjcyA8IDEpIHsNCgkJc3RyZW5ndGggPSBjcmFja1RpbWVJblNlY3MudG9GaXhl ZChwcmVjaXNpb24pICsgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NlY3MnKTsNCgl9IGVsc2Ug ew0KCQkvLyBPdGhlcndpc2Ugc2hvdyBhIHJvdW5kZWQtZG93biBudW1iZXINCgkJLy8gQWRk cyB0aGUgcGx1cmFsIG9udG8gYW55dGhpbmcgYmVmb3JlIGEgdGhvdXNhbmQgeWVhcnMNCgkJ dmFyIGludG9UaG91c2FuZHMgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncGx1cmFsJyk7DQoN CgkJLy8gQWRkcyB0aGUgJ0Fib3V0JyB0byBhbnl0aGluZyBhZnRlciBzZWNvbmRzDQoJCXZh ciBpbnRvTWludXRlcyA9ICcnOw0KDQoJCS8vIFJvdW5kIGRvd24gdGhlIHRpbWUNCgkJdmFy IG5ld1RpbWUgPSBNYXRoLmZsb29yKGNyYWNrVGltZUluU2Vjcyk7DQoNCgkJLy8gR28gdGhy b3VnaCBkaWZmZXJlbnQgcGVyaW9kIGxlbmd0aHMNCgkJZm9yICh2YXIgamR4IGluIHNtZF9w ZXJpb2RzKSB7DQoJCQkvLyBTdG9wIHdoZW4gdGhlIHJpZ2h0IHBlcmlvZCBpcyByZWFjaGVk DQoJCQlpZiAoY3JhY2tUaW1lSW5TZWNzIDwgc21kX3BlcmlvZHNbamR4XSkgeyBicmVhazsg fQ0KCQkJZWxzZSB7DQoJCQkJaWYgKGpkeCA9PSAidF90aG9feSIpIHsgaW50b1Rob3VzYW5k cyA9ICcnOyB9DQoJCQkJaWYgKGpkeCA9PSAidF9taW4iKSB7IGludG9NaW51dGVzID0gc21k X3Byb2dub3N0aWNzX2dUeHQoJ2Fib3V0Jyk7IH0NCgkJCQluZXdUaW1lID0gTWF0aC5mbG9v cihjcmFja1RpbWVJblNlY3MgLyBzbWRfcGVyaW9kc1tqZHhdKTsNCgkJCQlwZXJpb2RUeXBl ID0gamR4Ow0KCQkJfQ0KCQl9DQoNCgkJLy8gSWYgc2luZ3VsYXINCgkJaWYgKG5ld1RpbWUg PT0gMSkgew0KCQkJc3RyZW5ndGggPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYWJvdXQnKSAr ICcxICcgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dChwZXJpb2RUeXBlKTsNCgkJfSBlbHNlIHsN CgkJCS8vIENvbnZlcnQgbmV3VGltZSB0byBzdHJpbmcNCgkJCW5ld1RpbWUgKz0gJyc7DQoN CgkJCS8vIFNwbGl0IHdpdGggY29tbWFzIGV2ZXJ5IHRocmVlIGRpZ2l0cw0KCQkJdmFyIHJl Z2V4ID0gLyhcZCspKFxkezN9KS87DQoNCgkJCXdoaWxlIChyZWdleC50ZXN0KG5ld1RpbWUp KSB7DQoJCQkJbmV3VGltZSA9IG5ld1RpbWUucmVwbGFjZShyZWdleCwgJyQxJyArIHNtZF9w cm9nbm9zdGljc19nVHh0KCdkaWdpdHNlcCcpICsgJyQyJyk7DQoJCQl9DQoNCgkJCS8vIENv bWJpbmUgd2l0aCAnYWJvdXQnIGlmIG5lZWRlZCwgdGhlIHRpbWUgaXQgd2lsbCB0YWtlLCB0 aGUgcGVyaW9kIHR5cGUsIGFuZCB0aGUgJ3MnIGlmIG5lZWRlZA0KCQkJc3RyZW5ndGggPSBp bnRvTWludXRlcyArIG5ld1RpbWUgKyAiICIgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dChwZXJp b2RUeXBlKSArIGludG9UaG91c2FuZHM7DQoJCX0NCgl9DQoNCglyZXR1cm4gc3RyZW5ndGg7 DQp9DQoNCmZ1bmN0aW9uIHBhc3N3b3JkQ2hlY2sodGhhdCwgZSkgew0KCWlmIChlLmtleUNv ZGUgPT0gMjcgfHwgZS5jaGFyQ29kZSA9PSAyNykgew0KCQlqUXVlcnkodGhhdCkudmFsKCIi KTsNCgl9DQoNCgl2YXIgcGFzc3dvcmQgPSBqUXVlcnkodGhhdCkudmFsKCk7DQoNCglpZiAo cGFzc3dvcmQgIT0gIiIpIHsNCgkJdmFyIHN0cmVuZ3RoID0gc21kX3Byb2dfY2hyb25vU3Ry ZW5ndGgocGFzc3dvcmQpOw0KDQoJCS8vVE9ETzogZ1R4dCgpDQoJCWlmIChzdHJlbmd0aCA9 PSAtMSkgew0KCQkJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5odG1sKHNtZF9wcm9nbm9z dGljc19nVHh0KCdwd19wcmVhbWJsZScpICsgJyA8ZGl2IGNsYXNzPSJzbWRfcHJvZ19wYXNz X3N0cmVuZ3RoIj4nICsgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3B3X2NvbW1vbicpICsgJzwv ZGl2PiAnKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfcG9zdGFtYmxlJykpLmZhZGVJbig1 MDApOw0KCQl9IGVsc2Ugew0KCQkJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5odG1sKHNt ZF9wcm9nbm9zdGljc19nVHh0KCdwd190YWtlJykgKyAnIDxkaXYgY2xhc3M9InNtZF9wcm9n X3Bhc3Nfc3RyZW5ndGgiPicgKyBzdHJlbmd0aCArICc8L2Rpdj4gJyArIHNtZF9wcm9nbm9z dGljc19nVHh0KCdwd19jcmFjaycpKS5mYWRlSW4oNTAwKTsNCgkJfQ0KCX0gZWxzZSB7DQoJ CWpRdWVyeSgiI3NtZF9wcm9nX21ldGVyIikuaGlkZSgpOw0KCX0NCn0NCmpRdWVyeShmdW5j dGlvbigpIHsNCgl2YXIgc21kX3Byb2dfbWV0ZXIgPSAnPGRpdiBpZD0ic21kX3Byb2dfbWV0 ZXIiPjwvZGl2Pic7DQoJalF1ZXJ5KCIjY2hhbmdlX3Bhc3N3b3JkIikuYXBwZW5kKHNtZF9w cm9nX21ldGVyKTsNCglqUXVlcnkoIiNzbWRfcHJvZ19tZXRlciIpLmhpZGUoKTsNCglqUXVl cnkoIiNuZXdfcGFzcyIpLmtleWRvd24oZnVuY3Rpb24oZSkgew0KCQlpZiAoZS5rZXlDb2Rl ID09IDEzIHx8IGUuY2hhckNvZGUgPT0gMTMpIHsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0K CX0pOw0KCWpRdWVyeSgiI25ld19wYXNzIikua2V5dXAoZnVuY3Rpb24oZSl7DQoJCXBhc3N3 b3JkQ2hlY2sodGhpcywgZSk7DQoJfSk7DQp9KTsNCi8vXV0+DQo8L3NjcmlwdD4NCkVPUzsN Cn0NCg0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQovLyBXZWIgcGFnZQkJIDogaHR0cDovL2NvZGUuZ29vZ2xl LmNvbS9wL3BocHJvdGVjdG9yDQovLyBBdXRvcgkJCQk6IEh1Z28gU291c2EgCQlhZGFtYXN0 b3I2NjZAZ21haWwuY29tDQovLyBEYXRlCQkJCSA6IDIwMTAtMDMtMjUNCi8vIFZlcnNpb24J CQk6IDAuMy4xLjENCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KY2xhc3Mgc21kX3Byb2dfUGhQcm90ZWN0 b3Igew0KCXZhciAkU0hPV19FUlJPUlM7DQoNCglwdWJsaWMgZnVuY3Rpb24gc21kX3Byb2df UGhQcm90ZWN0b3IoJHNob3dfZXJyb3JzKSB7DQoJCSR0aGlzLT5TSE9XX0VSUk9SUz0kc2hv d19lcnJvcnM7DQoJCWlmICgkdGhpcy0+U0hPV19FUlJPUlMpIHsNCgkJCWVycm9yX3JlcG9y dGluZyhFX0VSUk9SIHwgRV9XQVJOSU5HIHwgRV9QQVJTRSk7CSAvL1Nob3cgZXJyb3JzDQoJ CQlpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsICIxIik7CS8vZGlzcGxheSBlcnJvcnMNCgkJ fSBlbHNlIHsNCgkJCWluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgIjAiKTsgLy9kaXNwbGF5 IGVycm9ycw0KCQkJaW5pX3NldCgnbG9nX2Vycm9ycycsICIxIik7CS8vbG9nX2Vycm9ycw0K CQl9DQoJfQ0KDQoJLyoNCgkqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGluIGEgaW5k ZXggcGFnZSB0aGF0IHJlZGlyZWN0cyB0byBvdGhlciBwYWdlcw0KCSoNCgkqLw0KCXB1Ymxp YyBmdW5jdGlvbiBpc01hbGljaW91cygpIHsNCgkJJHNxbGkgPSBmYWxzZTsNCg0KCQkkbnVt X2JhZF93b3JkczEgPSAkdGhpcy0+Q2hlY2tHZXQoKTsNCgkJJG51bV9iYWRfd29yZHMyID0g JHRoaXMtPkNoZWNrUG9zdCgpOw0KDQoJCWlmICgkbnVtX2JhZF93b3JkczEgPiAwKSB7DQoJ CQkkc3FsaSA9IHRydWU7DQoJCX0NCg0KCQlpZiAoJG51bV9iYWRfd29yZHMyID4gMCkgew0K CQkJJHNxbGkgPSB0cnVlOw0KCQl9DQoNCgkJcmV0dXJuICRzcWxpOw0KCX0NCg0KCS8vY2hl Y2sgZm9yIHNxbCBpbmplY3Rpb24gYW5kIFhTUyBpbiBQb3N0IHZhcmlhYmxlcw0KCXByaXZh dGUgZnVuY3Rpb24gQ2hlY2tQb3N0KCkgew0KCQkkbnVtX2JhZF93b3JkcyA9IDA7DQoNCgkJ Zm9yZWFjaCgkX1BPU1QgYXMgJGNhbXBvID0+ICRpbnB1dCkgew0KCQkJJF9QT1NUWyRjYW1w b109IGRvQXJyYXkoJF9QT1NUWyRjYW1wb10sICdodG1sZW50aXRpZXMnKTsgLy8gWFNTIFBS T1RFQ1RJT04NCgkJCSRudW1fYmFkX3dvcmRzID0gJG51bV9iYWRfd29yZHMgKyAkdGhpcy0+ d29yZEV4aXN0cygkaW5wdXQpOyAvL1NRTCBJTkpFQ1RJT04NCgkJfQ0KDQoJCXJldHVybiAk bnVtX2JhZF93b3JkczsNCgl9DQoNCgkvL2NoZWNrIGZvciBzcWwgaW5qZWN0aW9uIGFuZCBY U1MgaW4gR0VUIHZhcmlhYmxlcw0KCXByaXZhdGUgZnVuY3Rpb24gQ2hlY2tHZXQoKSB7DQoJ CSRudW1fYmFkX3dvcmRzID0gMDsNCg0KCQlmb3JlYWNoKCRfR0VUIGFzICRjYW1wbyA9PiAk aW5wdXQpew0KCQkJJF9HRVRbJGNhbXBvXT0gZG9BcnJheSgkX0dFVFskY2FtcG9dLCAnaHRt bGVudGl0aWVzJyk7IC8vIFhTUyBQUk9URUNUSU9ODQoNCgkJCWlmKCR0aGlzLT5pc0lkSW5q ZWN0aW9uKCRjYW1wbywkaW5wdXQpKXsgLy9TUUwgSUQgSU5KRUNUSU9ODQoJCQkJJG51bV9i YWRfd29yZHMgPQkkbnVtX2JhZF93b3JkcyArIDAuNTsNCgkJCX0NCg0KCQkJJG51bV9iYWRf d29yZHMgPSAkbnVtX2JhZF93b3JkcyArICR0aGlzLT53b3JkRXhpc3RzKCRpbnB1dCk7IC8v U1FMIElOSkVDVElPTg0KCQl9DQoNCgkJcmV0dXJuICRudW1fYmFkX3dvcmRzOw0KCX0NCg0K CS8qKg0KCSoJcmV0dXJuIHRydWUgaWYgaW5qZWN0aW9uIHNxbCB3b3JkIGlzIGZvdW5kLg0K CSoJVGhlIGlucHV0IGlzIHRlc3RlZCBpZiBpcyBlcXVhbCB0byBhIHNxbCBpbmplY3Rpb24g cGF0dGVybg0KCSoJXGJbXmEtel0qP2Ryb3BbXmEtel0qP1xiDQoJKgkgaHR0cDovL3d3dy5w YWdlY29sdW1uLmNvbS90b29sL3JlZ3Rlc3QuaHRtDQoJKiovLyoJCSAiLyoiLCIrIgkJCQkq Lw0KCXByaXZhdGUgZnVuY3Rpb24gd29yZEV4aXN0cygkaW5wdXQpIHsNCgkJJG51bV9iYWRf d29yZHMgPSAwOw0KDQoJCS8qDQoJCSBXT1JEIEFGVEVSDQoJCSovDQoJCSRiYWRkZWxpbTEg PSAiW15hLXpdKiI7CS8vdGhlIGRlbGltIHNob3VsZCBiZSBmcm9tICJhIiB0byAiYiIgYW55 dGhpbmcgZWxzZSBpcyBjb25zaWRlcmVkIHNxbCBpbmplY3Rpb24gOikNCgkJJGJhZGRlbGlt MiA9ICJbXmEtel0rIjsNCgkJJGJhZHdvcmRzPSBhcnJheSgidW5pb24iLCAic2VsZWN0Iiwg InNob3ciLCAiaW5zZXJ0IiwgInVwZGF0ZSIsICJkZWxldGUiLCAiZHJvcCIsICJ0cnVuY2F0 ZSIsICJjcmVhdGUiLCAibG9hZF9maWxlIiwgImV4ZWMiLCAiIyIsICItLSIpOw0KCQkvLyIv KiINCgkJZm9yZWFjaCgkYmFkd29yZHMgYXMgJGJhZHdvcmQpIHsNCgkJCSRleHByZXNzaW9u ID0gIi8iLiRiYWRkZWxpbTEuc3RydG9sb3dlcigkYmFkd29yZCkuJGJhZGRlbGltMi4iLyI7 DQoJCQlpZiAocHJlZ19tYXRjaCAoJGV4cHJlc3Npb24sIHN0cnRvbG93ZXIoJGlucHV0KSkp IHsNCgkJCQkvL2RpZSgic3FsIGluamVjdGlvbiEiKTsNCgkJCQkkbnVtX2JhZF93b3Jkcysr Ow0KCQkJfQ0KCQl9DQoNCgkJLyoNCgkJQkVGT1JFIFdPUkQNCgkJKi8NCgkJJGJhZGRlbGlt MSA9ICJbXmEtel0rIjsJLy90aGUgZGVsaW0gc2hvdWxkIGJlIGZyb20gImEiIHRvICJiIiBh bnl0aGluZyBlbHNlIGlzIGNvbnNpZGVyZWQgc3FsIGluamVjdGlvbiA6KQ0KCQkkYmFkZGVs aW0yID0gIlteYS16XSoiOw0KCQkkYmFkd29yZHM9IGFycmF5KCJAQHZlcnNpb24iLCAiQEBk YXRhZGlyIiwgInVzZXIiLCAidmVyc2lvbiIpOw0KDQoJCWZvcmVhY2goJGJhZHdvcmRzIGFz ICRiYWR3b3JkKSB7DQoJCQkkZXhwcmVzc2lvbiA9ICIvIi4kYmFkZGVsaW0xLnN0cnRvbG93 ZXIoJGJhZHdvcmQpLiRiYWRkZWxpbTIuIi8iOw0KCQkJaWYgKHByZWdfbWF0Y2ggKCRleHBy ZXNzaW9uLCBzdHJ0b2xvd2VyKCRpbnB1dCkpKSB7DQoJCQkJLy9kaWUoInNxbCBpbmplY3Rp b24hIik7DQoJCQkJJG51bV9iYWRfd29yZHMrKzsNCgkJCX0NCgkJfQ0KDQoJCS8qDQoJCUJF Rk9SRSBXT1JEIEFGVEVSDQoJCSovDQoJCSRiYWRkZWxpbTEgPSAiW15hLXpdKyI7CS8vdGhl IGRlbGltIHNob3VsZCBiZSBmcm9tICJhIiB0byAiYiIgYW55dGhpbmcgZWxzZSBpcyBjb25z aWRlcmVkIHNxbCBpbmplY3Rpb24gOikNCgkJJGJhZGRlbGltMiA9ICJbXmEtel0rIjsNCgkJ JGJhZHdvcmRzPSBhcnJheSgiYmVuY2htYXJrIiwgIi0tIiwgInZhcmNoYXIiLCAiY29udmVy dCIsICJjaGFyIiwgImxpbWl0IiwgImluZm9ybWF0aW9uX3NjaGVtYSIsInRhYmxlX25hbWUi LCAiZnJvbSIsICJ3aGVyZSIsICJvcmRlciIpOw0KDQoJCWZvcmVhY2goJGJhZHdvcmRzIGFz ICRiYWR3b3JkKSB7DQoJCQkkZXhwcmVzc2lvbiA9ICIvIi4kYmFkZGVsaW0xLnN0cnRvbG93 ZXIoJGJhZHdvcmQpLiRiYWRkZWxpbTIuIi8iOw0KCQkJaWYgKHByZWdfbWF0Y2ggKCRleHBy ZXNzaW9uLCBzdHJ0b2xvd2VyKCRpbnB1dCkpKSB7DQoJCQkJLy9kaWUoInNxbCBpbmplY3Rp b24hIik7DQoJCQkJJG51bV9iYWRfd29yZHMrKzsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiAk bnVtX2JhZF93b3JkczsNCgl9DQoNCgkvKioNCgkqCXJldHVybiB0cnVlIGlmIGFuZCBJRCBp cyBub3QgcmVhbGx5IGFuIElEIQ0KCSoNCgkqKi8NCglwcml2YXRlIGZ1bmN0aW9uIGlzSURJ bmplY3Rpb24oJGNhbXBvLCRpbnB1dCkgew0KCQkkcmVnPSIvXmlkLyI7DQoNCgkJaWYocHJl Z19tYXRjaCgkcmVnLCAkY2FtcG8pKSB7DQoJCQlpZighJHRoaXMtPnN0cmluZ0lzTnVtYmVy Tm90WmVybygkaW5wdXQpIHx8ICRpbnB1dCA9PSAnJykgew0KCQkJCXJldHVybiB0cnVlOwkg Ly8gaWYgaXMgSUQgYW5kIE5PVCBJTlRFR0VSIG9yIE5VTEwgLT4gU1FMIElOSkVDVElPTiEh DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKglyZXR1cm4g dHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgbnVtYmVyIChkaWZlcmVudCBmcm9tIDAsIHRoZSBp ZCBjb3VsZCBub3QgYmUgemVybyEpDQoJKg0KCSoqLw0KCXByaXZhdGUgZnVuY3Rpb24gc3Ry aW5nSXNOdW1iZXJOb3RaZXJvKCAkc3RyaW5nICkgew0KCQkkaT0wOw0KCQl3aGlsZSAoICRp IDwgc3RybGVuKCRzdHJpbmcpICkgew0KCQkJaWYgKCRzdHJpbmd7JGl9ID09ICIwIiAmJiAk aT09MCkNCgkJCQlyZXR1cm4gZmFsc2U7DQoNCgkJCS8vdmVyaWZpY2Egc2Ugw6kgbnVtZXJv DQoJCQlpZiAoICRzdHJpbmd7JGl9ICE9ICIwIiAmJg0KCQkJCSRzdHJpbmd7JGl9ICE9ICIx IiAmJg0KCQkJCSRzdHJpbmd7JGl9ICE9ICIyIiAmJg0KCQkJCSRzdHJpbmd7JGl9ICE9ICIz IiAmJg0KCQkJCSRzdHJpbmd7JGl9ICE9ICI0IiAmJg0KCQkJCSRzdHJpbmd7JGl9ICE9ICI1 IiAmJg0KCQkJCSRzdHJpbmd7JGl9ICE9ICI2IiAmJg0KCQkJCSRzdHJpbmd7JGl9ICE9ICI3 IiAmJg0KCQkJCSRzdHJpbmd7JGl9ICE9ICI4IiAmJg0KCQkJCSRzdHJpbmd7JGl9ICE9ICI5 IikNCgkJCXJldHVybiBmYWxzZTsNCgkJCSRpKys7DQoJCX0vL3doaWxlDQoNCgkJcmV0dXJu IHRydWU7DQoJfQ0KfSAvL2VuZCBjbGFzcw0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCi8vIFBsdWdpbi1zcGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdzIC0gbG9jYWxpc2Ug YXMgcmVxdWlyZWQNCi8vIFRPRE86IFRleHRwYWNrIHRoaXMNCmZ1bmN0aW9uIHNtZF9wcm9n bm9zdGljc19nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCglnbG9iYWwgJHByZWZz LCAkc21kX3Byb2dub3N0aWNzX2V2ZW50Ow0KCSRsYW5nID0gYXJyYXkoDQoJCSdhbGFybV9m cmVxJyA9PiAnQWxhcm0gb24gZGV0ZWN0aW9uIGFuZCBldmVyeTogJywNCgkJJ2Fja2VkJyA9 PiAnQWxhcm1zIGFja25vd2xlZGdlZC4nLA0KCQknY2hfYWRkJyA9PiAnQWRkaXRpb25zJywN CgkJJ2NoX2RlbCcgPT4gJ0RlbGV0aW9ucycsDQoJCSdjaF9tb2QnID0+ICdNb2RpZmljYXRp b25zJywNCgkJJ2NoZWNrX2ZvcicgPT4gJ0NoZWNrIGZpbGVzIGZvcjogJywNCgkJJ2NoZWNr X2ZyZXEnID0+ICdDaGVjayBmaWxlcyAoYXQgbW9zdCkgZXZlcnk6ICcsDQoJCSdjaGVja193 aGVyZScgPT4gJ0NoZWNrIGZpbGVzIG9uIHB1YmxpYyBzaWRlIGNsaWNrczogJywNCgkJJ2Nz aScgPT4gJ0dhdGhlciBmb3JlbnNpY3MgYW5kIHNlbmQgZm9yIGFuYWx5c2lzJywNCgkJJ2Nz aV9zZW50JyA9PiAnIEZvcmVuc2ljcyBkYXRhIHNlbnQnLA0KCQknY3N2JyA9PiAnKGNvbW1h LXNlcGFyYXRlZCknLA0KCQknY3Vycm1vbicgPT4gJ1lvdSBhcmUgY3VycmVudGx5IG1vbml0 b3Jpbmcge2N1cnJ9IG91dCBvZiB7b3V0b2Z9IGF2YWlsYWJsZSBmaWxlcy4nLA0KCQknZG9j cm9vdF9maWxlcycgPT4gJ0NvbnNpZGVyIG1vdmluZyB0aGUgImZpbGVzIiBmb2xkZXIgb3V0 c2lkZSBvZiB5b3VyIHNpdGUgcm9vdCBmb2xkZXIuIFlvdSBjYW4gZG8gdGhpcyB2aWEgdGhl ICJBZG1pbiA+IFByZWZzID4gQWR2YW5jZWQgPiBGaWxlIGRpcmVjdG9yeSBwYXRoIiBzZXR0 aW5nLicsDQoJCSdkb2Nyb290X3Byb2dub3N0aWNzJyA9PiAnUGxlYXNlIGNoYW5nZSB0aGUg IlByb2dub3N0aWNzIGZvbGRlciIgc2V0dGluZyB0byBhIGRpcmVjdG9yeSBvdXRzaWRlIHlv dXIgc2l0ZSByb290IGZvbGRlci4nLA0KCQknZG9jcm9vdF90bXAnID0+ICdDb25zaWRlciBt b3ZpbmcgdGhlICJ0bXAiIGZvbGRlciBvdXRzaWRlIG9mIHlvdXIgc2l0ZSByb290IGZvbGRl ci4gWW91IGNhbiBkbyB0aGlzIHZpYSB0aGUgIkFkbWluID4gUHJlZnMgPiBBZHZhbmNlZCA+ IFRlbXBvcmFyeSBkaXJlY3RvcnkgcGF0aCIgc2V0dGluZy4nLA0KCQknZXhjbHVkaXInID0+ ICdFeGNsdWRlIGZvbGRlcnM6ICcsDQoJCSdmaWxlc191cGRhdGVkJyA9PiAnRmlsZSBsaXN0 IHVwZGF0ZWQnLA0KCQknaGVscF9saW5rJyA9PiAnKDxhIGhyZWY9IntsaW5rfSI+SGVscDwv YT4pJywNCgkJJ2lnbm9yZXMnID0+ICdJZ25vcmUgZmlsZXM6ICcsDQoJCSdsYmxfY2hhbmdl ZCcgPT4gJ0NoYW5nZWQnLA0KCQknbGJsX2hhc2htb2QnID0+ICdDT01QUk9NSVNFRCcsDQoJ CSdsYmxfbWlzc2luZycgPT4gJ01pc3NpbmcnLA0KCQknbGJsX2FkZGVkJyA9PiAnQWRkZWQg KG5vdCBtb25pdG9yZWQpJywNCgkJJ2xpc3Rsb2MnID0+ICdGaWxlIGxvY2F0aW9uczogJywN CgkJJ21haWx0bycgPT4gJ1NlbmQgZS1tYWlsIHRvOiAnLA0KCQknbWFpbHRvX2NzaScgPT4g J1NlbmQgZm9yZW5zaWNzIHRvOiAnLA0KCQknbW9uZmlsZXNfZXhwbGFpbicgPT4gJ1NlbGVj dCBhbGwgdGhlIGZpbGVzIHlvdSB3aXNoIHRvIG1vbml0b3IgYW5kIGNsaWNrIFNhdmUuIEFs dGVyaW5nIHRoaXMgbGlzdCB3aWxsIGF1dG9tYXRpY2FsbHkgYWNrbm93bGVkZ2UgYW55IG91 dHN0YW5kaW5nIGFsYXJtcyBhZ2FpbnN0IHRoZSBzZWxlY3RlZCBmaWxlcy4nLA0KCQknbmlj ZV90cnlfaGVhZGVyJyA9PiAnTmljZSB0cnksIGJ1dCB0aGF0IEhUVFAgcmVxdWVzdCBpcyBi bG9ja2VkLicsDQoJCSduaWNlX3RyeV9pbmplY3QnID0+ICdZb3VyIHJlcXVlc3QgaGFzIGJl ZW4gZGVuaWVkIGJ5IHNtZF9wcm9nbm9zdGljcy4gTmljZSB0cnkuJywNCgkJJ25vX2FsYXJt cycgPT4gJ05vIGFsYXJtcyB0byBhY2tub3dsZWRnZSBhdCBwcmVzZW50LicsDQoJCSdub19m aWxlcycgPT4gJ05vIGZpbGVzIHRvIGxpc3QuIENoZWNrIHRoZSBwbHVnaW4gc2V0dXAgKGFu ZCBTYXZlIGl0KS4nLA0KCQknbm9fbG9nX2VudHJpZXMnID0+ICdObyBsb2cgYWN0aXZpdHkg YXJvdW5kIHRoZSB0aW1lIG9mIHRoZSBkaWZmZXJlbmNlcy4nLA0KCQknbm9uZV9zZWxlY3Rl ZCcgPT4gJ05vIGZpbGVzIHNlbGVjdGVkJywNCgkJJ25vdGlmeV9lbWFpbCcgPT4gJ0UtbWFp bCcsDQoJCSdub3RpZnlfdHhwJyA9PiAnVFhQIGludGVyZmFjZScsDQoJCSdub3RpZnlfdmlh JyA9PiAnTm90aWZ5IHZpYTogJywNCgkJJ3ByZWFtYmxlX2FkZGVkJyA9PiAnVGhlc2UgZmls ZXMgaGF2ZSBiZWVuIGFkZGVkOiAnLA0KCQkncHJlYW1ibGVfZmlsZXMnID0+ICdGaWxlIGNv bnRlbnRzIGZvbGxvd3M6ICcsDQoJCSdwcmVhbWJsZV9oYXNoZG93bicgPT4gJ1dBUk5JTkch IFRoZSBjaGVja3N1bXMgZmlsZSBpcyBtaXNzaW5nLicsDQoJCSdwcmVhbWJsZV9oYXNobW9k JyA9PiAnV0FSTklORyEgVGhlIGNoZWNrc3VtcyBmaWxlIGhhcyBiZWVuIGFsdGVyZWQ6ICcs DQoJCSdwcmVhbWJsZV9taXNzJyA9PiAnVGhlc2UgZmlsZXMgYXJlIG1pc3Npbmc6ICcsDQoJ CSdwcmVhbWJsZV9ub2snID0+ICdUaGVzZSBmaWxlcyBkaWZmZXIgZnJvbSB0aGVpciBleHBl Y3RlZCBjb250ZW50OiAnLA0KCQkncHJlYW1ibGVfc3FsX2luamVjdCcgPT4gJ1Bvc3NpYmxl IFNRTCBpbmplY3Rpb24gZGV0ZWN0ZWQnLA0KCQkncHJlYW1ibGVfdHhwbG9nJyA9PiAnTG9n IGVudHJpZXMgcHJpb3IgdG8gdGhpcyBkZXRlY3Rpb246ICcsDQoJCSdwcm9nbG9jJyA9PiAn UHJvZ25vc3RpY3MgZm9sZGVyOiAnLA0KCQkncHJvZ3BmeCcgPT4gJ1VuaXF1ZSBwcmVmaXg6 ICcsDQoJCSdwbmxfYWNrJyA9PiAnQWxhcm1zJywNCgkJJ3BubF9hY2tpdCcgPT4gJ0Fja25v d2xlZGdlJywNCgkJJ3BubF9hZHZpY2UnID0+ICdBZHZpY2UnLA0KCQkncG5sX2NzaScgPT4g J1NlbmQgRm9yZW5zaWNzJywNCgkJJ3BubF9maWxlcycgPT4gJ0ZpbGVzJywNCgkJJ3BubF9z ZXR1cCcgPT4gJ1NldHVwJywNCgkJJ3Bvc3RhbWJsZScgPT4gJ0Fja25vd2xlZGdlIGFsYXJt cycsDQoJCSdyZXFfaGVhZGVycycgPT4gJ0Jsb2NrIHJlcXVlc3QgaGVhZGVyczogJywNCgkJ J3JlcV9ub3RfYWxsb3dlZCcgPT4gJ1JFUVVFU1RfTUVUSE9EIG5vdCBhbGxvd2VkOiB7cmVx fScsDQoJCSdyaF9kZWwnID0+ICdERUxFVEUnLA0KCQkncmhfcHV0JyA9PiAnUFVUJywNCgkJ J3JoX3RyYWNlJyA9PiAnVFJBQ0UnLA0KCQkndHRsX2FjaycgPT4gJ1Byb2dub3N0aWMgYWxh cm0gYWNrbm93bGVkZ2VtZW50JywNCgkJJ3R0bF9hZHZpY2UnID0+ICdQcm9nbm9zdGljIGFk dmljZScsDQoJCSd0dGxfZmlsZXMnID0+ICdQcm9nbm9zdGljIGZpbGUgbW9uaXRvcmluZycs DQoJCSd0dGxfZmlsZW9wdHMnID0+ICdGaWxlc3lzdGVtIG9wdGlvbnMnLA0KCQkndHRsX21v bm9wdHMnID0+ICdNb25pdG9yaW5nIG9wdGlvbnMnLA0KCQkndHRsX3JlYWxvcHRzJyA9PiAn UmVhbHRpbWUgb3B0aW9ucycsDQoJCSd0dGxfc2V0dXAnID0+ICdQcm9nbm9zdGljIHNldHVw JywNCgkJJ3NtZF9wcm9nbm9zdGljcycgPT4gJ1Byb2dub3N0aWNzJywNCgkJJ3NlY29uZHMn ID0+ICcoc2Vjb25kcyknLA0KCQknc2V0dXBfZXhpc3RzJyA9PiAnVGhlIHNldHVwIGRpcmVj dG9yeSBzdGlsbCBleGlzdHMuIFBsZWFzZSBkZWxldGUgaXQuJywNCgkJJ3Nob3dfZ3JhbnRz JyA9PiAnWW91ciBUWFAgdXNlciBjYW4gYWNjZXNzIHRoZSBNeVNRTCBwcml2aWxlZ2VzIGlu IHRoZSBEQi4gQ29uc2lkZXIgYWNjZXNzaW5nIHRoZSBEQiB1c2luZyBhIGxlc3MgcHJpdmls ZWdlZCB1c2VyLicsDQoJCSdzcWxfZmlsZV9wcml2cycgPT4gJ1lvdXIgTXlTUUwgdXNlciBo YXMgRklMRSBwcml2aWxlZ2VzLiBDb25zaWRlciByZXZva2luZyB0aGlzIHJpZ2h0IHVubGVz cyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4nLA0KCQknc3FsX2luYWRtJyA9PiAnQWRtaW4gc2lk ZScsDQoJCSdzcWxfaW5qZWN0JyA9PiAnKGV4cGVyaW1lbnRhbCkgQ2hlY2sgZm9yIFNRTCBp bmplY3Rpb24gYXR0YWNrcyBvbjogJywNCgkJJ3NxbF9pbnB1YicgPT4gJ1B1YmxpYyBzaWRl JywNCgkJJ3N0YXRfZ2lkJyA9PiAnR3JvdXAgSUQ6ICcsDQoJCSdzdGF0X21vZCcgPT4gJ01v ZGlmaWVkOiAnLA0KCQknc3RhdF9uYW1lJyA9PiAnRmlsZW5hbWU6ICcsDQoJCSdzdGF0X3Np emUnID0+ICdTaXplOiAnLA0KCQknc3RhdF91aWQnID0+ICdVc2VyIElEOiAnLA0KCQknc3Vi amVjdCcgPT4gJ1Byb2dub3N0aWNzICgnLiRwcmVmc1snc2l0ZXVybCddLicpJywNCgkJJ3N1 YmplY3RfY3NpJyA9PiAnUHJvZ25vc3RpY3MgKCcuJHByZWZzWydzaXRldXJsJ10uJykgZm9y ZW5zaWNzJywNCgkJJ3RpZ2h0JyA9PiAnWW91IHJ1biBhIHByZXR0eSB0aWdodCBzaGlwLiBT dGF5IGZyb3N0eS4nLA0KCQknd2Fybl9sb2MnID0+ICdGaWxlIGxvY2F0aW9ucyBoYXZlIGNo YW5nZWQuIEVuc3VyZSB5b3UgdXBkYXRlIHlvdXIgPGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50 PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19m aWxlcyI+bGlzdCBvZiBmaWxlczwvYT4gbm93JywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFu Z1skd2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtz OjE6IjEiO3M6NToiZmxhZ3MiO3M6MToiMSI7czo0OiJoZWxwIjtzOjE5MTg0OiI8ZGl2IGlk PSJzbWRfaGVscCI+CgoJPGgxPnNtZF9wcm9nbm9zdGljczwvaDE+CgoJPHA+VGhlIDxlbT5B ZG1pbiAtJmd0OyBEaWFnbm9zdGljczwvZW0+IHRhYiBpcyBncmVhdCBpZiB5b3UgcmVtZW1i ZXIgdG8gbG9vayBhdCBpdCBmcm9tIHRpbWUgdG8gdGltZS4gQnV0IGlmIHlvdXIgc2VydmVy IGlzIGNvbXByb21pc2VkLCBob3cgd291bGQgeW91IGtub3cgYWJvdXQgYSBzbmVha3kgVHJv amFuIG9yIG1hbHdhcmUgdW50aWwgeW91ciB2aXNpdG9ycyBjb21wbGFpbiBvciB0aGUgc2Vh cmNoIGVuZ2luZXMgYmxvY2sgeW91ciBzaXRlPzwvcD4KCgk8cD5UaGUgYW5zd2VyIGlzIHRv IHVzZSBzbWRfcHJvZ25vc3RpY3MgdG8gdGVsbCB5b3Ugd2hlbiB0aGluZ3MgaGF2ZSBjaGFu Z2VkIHNvIHlvdSBjYW4gdGFrZSBhY3Rpb24gaW1tZWRpYXRlbHkuPC9wPgoKCTxoMj5GZWF0 dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5Nb25pdG9yIGZpbGVzIGFuZCBhdHRhY2tzIGluIGFu ZCBhcm91bmQgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpbnN0YWxsYXRp b248L2xpPgoJCTxsaT5BdXRvbWF0aWNhbGx5IGRldGVjdCBhbnkgY2hhbmdlcyBhbmQgZGlz cGxheS9zZW5kIG5vdGlmaWNhdGlvbiB0byBkZXNpZ25hdGVkIHVzZXIocyk8L2xpPgoJCTxs aT5DdXN0b21pc2Ugd2hlcmVhYm91dHMgYW5kIGhvdyBvZnRlbiB0aGUgY2hlY2tzIGFyZSBw ZXJmb3JtZWQ8L2xpPgoJCTxsaT5BY2tub3dsZWRnZSBrbm93biBhbHRlcmF0aW9ucyBhbmQg Y29uZmlndXJlIHJlcGVhdCBhbGFybXMgaWYgdGhlIHNpdHVhdGlvbiByZW1haW5zIHVuY2hl Y2tlZDwvbGk+CgkJPGxpPlJ1ZGltZW50YXJ5IHBhc3N3b3JkIHN0cmVuZ3RoIG1ldGVyIGlu Y2x1ZGVkPC9saT4KCTwvdWw+CgoJPGgyPkF1dGhvciAvIGNyZWRpdHM8L2gyPgoKCTxwPldy aXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYg RGF3c29uPC9hPi4gTWFueSB0aGFua3MgdG8gS2V2aW4gUG90dHMgYW5kIFN0ZXZlIERpY2tp bnNvbiBmb3IgYmV0YSB0ZXN0aW5nIGFuZCBmZWF0dXJlIGVuaGFuY2VtZW50cy4gQWxzbyBr dWRvcyB0byBzbWFsbGhhZHJvbmNvbGxpZGVyIGZvciB0aGUgYmFzaXMgb2YgdGhlIHBhc3N3 b3JkIHN0cmVuZ3RoIGNhbGN1bGF0b3IgYW5kIEh1Z28gU291c2EgZm9yIHRoZSBwaFByb3Rl Y3RvciBjbGFzcy48L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAvIHVuaW5zdGFsbGF0aW9uPC9o Mj4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5SZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiA0LjMuMCsgYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IDU8 L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRw Oi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTE5NS9zbWRfcHJvZ25vc3RpY3MiPnRleHRw YXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20v c3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3Rh bGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBOb3RlIHRoYXQgaXQgaXMgcmVjb21tZW5kZWQg dGhhdCB0aGUgcGx1Z2luIHJ1bnMgYXMgcHJpb3JpdHkgMSBzbyBpdCBjYW4gZGV0ZWN0IHRo aW5ncyBiZWZvcmUgb3RoZXIgcGx1Z2lucy48L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBkZWxl dGUgZnJvbSB0aGUgPGVtPkFkbWluIC0mZ3Q7IFBsdWdpbnM8L2VtPiBwYWdlLiBZb3UgbWF5 IHVzZSBzbWRfcHJlZmFsaXplciB0byByZW1vdmUgYW55IDxjb2RlPnNtZF9wcm9nbm9zdGlj c18qPC9jb2RlPiBwcmVmZXJlbmNlcyB0aGF0IHRoZSBwbHVnaW4gY3JlYXRlZC48L3A+CgoJ PHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmll d3RvcGljLnBocD9pZD0zNDkzOCI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9y IHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48 L3A+CgoJPGgyPlF1aWNrIHN0YXJ0OiB0aGUgdGhyZWUgc3RlcHMgdG8gZGV0ZWN0aW9uPC9o Mj4KCgk8b2w+CgkJPGxpPlZpc2l0IDxlbT5FeHRlbnNpb25zIC0mZ3Q7IFByb2dub3N0aWNz PC9lbT4sIGFsdGVyIHRoZSBzZXR1cCBpbmZvcm1hdGlvbiB0byB0YXN0ZSBhbmQgPHN0cm9u Zz5tYWtlIHN1cmUgeW91IDxlbT5TYXZlPC9lbT4gaXQ8L3N0cm9uZz48L2xpPgoJCTxsaT5D bGljayB0aGUgUHJvZ25vc3RpYyB0YWImIzgyMTc7cyA8ZW0+RmlsZXM8L2VtPiBidXR0b24g KGlnbm9yZSBhbnkgd2FybmluZyBhYm91dCBtaXNzaW5nIGNoZWNrc3VtcyBmb3Igbm93OiB0 aGV5JiM4MjE3O3ZlIG5vdCBiZWVuIGNyZWF0ZWQgeWV0KSBhbmQgY2hvb3NlIHRoZSBmaWxl cyB5b3Ugd2lzaCB0byBtb25pdG9yLiA8c3Ryb25nPk1ha2Ugc3VyZSB5b3UgPGVtPlNhdmU8 L2VtPiB0aGUgY2hhbmdlczwvc3Ryb25nPjwvbGk+CgkJPGxpPkdvIGFib3V0IHlvdXIgYnVz aW5lc3MuIElmIHRoZSBmaWxlc3lzdGVtIGNoYW5nZXMgeW91JiM4MjE3O2xsIGJlIHRvbGQg YWJvdXQgaXQuIFBsZWFzZSBjb25zaWRlciBoZWxwaW5nIHRvIDxhIGhyZWY9IiNzbWRfYmV0 dGVyIj5tYWtlIHRoZSBwbHVnaW4gYmV0dGVyPC9hPjwvbGk+Cgk8L29sPgoKCTxoMiBpZD0i c21kX3NldHVwIj5TZXR1cDwvaDI+CgoJPHA+VGhlIDxlbT5Qcm9nbm9zdGljIHNldHVwPC9l bT4gcGFnZSBob3VzZXMgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6PC9w PgoKCTxoMz5Nb25pdG9yaW5nIG9wdGlvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmNoZWNrIGZpbGVzIG9uIHB1YmxpYyBzaWRlIGNsaWNrczwvc3Bhbj4gOiBj aGVja3MgYXJlIGFsd2F5cyBwZXJmb3JtZWQgd2hlbiBwZW9wbGUgdmlzaXQgYWRtaW4gc2lk ZSB0YWJzLiBZb3UgbWF5IGFsc28gZWxlY3QgdG8gY2hlY2sgdGhlIGZpbGVzIHdoZW4gdmlz aXRvcnMvYm90cyBicm93c2UgeW91ciB3ZWIgc2l0ZSBpZiB5b3UgcHJlZmVyIChzZWUgPGEg aHJlZj0iI3NtZF9ob3dpdHdvcmtzIj5ob3cgaXQgd29ya3M8L2E+IGZvciBkZXRhaWxzKS48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2hlY2sgZmlsZXMgKGF0IG1vc3QpIGV2 ZXJ5PC9zcGFuPiA6IHRoZSBwbHVnaW4gZG9lcyBub3QgY2hlY2sgdGhlIGZpbGVzIGV2ZXJ5 IGNsaWNrIGJlY2F1c2UgdGhhdCB3b3VsZCBwbGFjZSB1bm5lY2Vzc2FyeSBzdHJhaW4gb24g dGhlIHNlcnZlci4gSW5zdGVhZCB5b3UgY2hvb3NlIGEgY29uZmlndXJhYmxlIHRpbWUgJiM4 MjEyOyBpbiBzZWNvbmRzICYjODIxMjsgYWZ0ZXIgd2hpY2ggdGhlIHZlcnkgbmV4dCBhZG1p bi0gb3IgcHVibGljLXNpZGUgY2xpY2sgd2lsbCB0cmlnZ2VyIHRoZSBjaGVjay48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+YWxhcm0gb24gZGV0ZWN0aW9uIGFuZCBldmVyeTwv c3Bhbj4gOiB3aGVuIHNvbWV0aGluZyBoYXMgY2hhbmdlZCBhbmQgaXQmIzgyMTc7cyBkZXRl Y3RlZCwgYW4gYWxhcm0gYWN0aW9uIGlzIGFsd2F5cyB0YWtlbi4gQnV0IGlmIHRoZSBwbHVn aW4gY29udGludWFsbHkgYm9tYmFyZGVkIHlvdSB3aXRoIGluZm9ybWF0aW9uIGl0IHdvdWxk IGJlIGFubm95aW5nIGFuZCBub3QgYXMgdXNlZnVsLiBUaGlzIHNldHRpbmcgYWxsb3dzIHlv dSB0byBjb25maWd1cmUgdGhlIGludGVydmFsIGJldHdlZW4gcmVwZWF0IG5hZ3Mgb2YgdGhl IHNhbWUgbWVzc2FnZS4gT25jZSBhIGRheSAodGhlIGRlZmF1bHQgb2YgODY0MDAgc2Vjb25k cykgYnkgZS1tYWlsIGlzIHVzdWFsbHkgZW5vdWdoIHVubGVzcyB5b3UmIzgyMTc7cmUgYSBt YXNvY2hpc3QuIE5vdGUgdGhhdCBpZiBtb3JlIGZpbGVzIGFyZSBjaGFuZ2VkICYjODIxMjsg ZXZlbiB3aGVuIHRoZSB0aW1lb3V0IHBlcmlvZCBoYXMgeWV0IHRvIGVsYXBzZSAmIzgyMTI7 IHlvdSB3aWxsIHJlY2VpdmUgYW5vdGhlciBhbGVydC48ZGl2IGNsYXNzPSJzbWRfYnJlYWsi PllvdSBtYXkgc3BlY2lmeSB0d28gdmFsdWVzIChjb21tYS1zZXBhcmF0ZWQpIGlmIHlvdSB3 aXNoOiB0aGUgZmlyc3QgaXMgdGhlIHRpbWUgYmV0d2VlbiBub3RpZmljYXRpb25zIHRvIHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBhZG1pbiBzaWRlOyB0aGUgc2Vjb25k IGlzIHRoZSB0aW1lIGJldHdlZW4gZS1tYWlscy4gSWYgeW91IHVzZSBvbmx5IG9uZSB2YWx1 ZSB0aGVuIGl0IHdpbGwgYmUgYXBwbGllZCB0byBib3RoLjwvZGl2PjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5ub3RpZnkgdmlhPC9zcGFuPiA6IGNob29zZSBob3cgeW91IHdp c2ggdG8gYmUgbm90aWZpZWQ6Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IEludGVyZmFjZSB3aWxsIGRpc3BsYXkgYSBtZXNzYWdlIG9uIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBhZG1pbiBzaWRlIHdoZW4gYSBjaGFuZ2UgaXMgZGV0 ZWN0ZWQuPC9saT4KCQk8bGk+RS1tYWlsIHdpbGwgc2VuZCBvdXQgYW4gZS1tYWlsIGFib3V0 IHRoZSBjaGFuZ2VzLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5zZW5kIGUtbWFpbCB0bzwvc3Bhbj4gOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBlLW1h aWwgYWRkcmVzcyByZWNpcGllbnRzLiBJZiB0aGlzIGlzIGVtcHR5IG5vIGUtbWFpbHMgd2ls bCBiZSBzZW50IGV2ZW4gaWYgeW91IGNob29zZSB0byBiZSBub3RpZmllZCB2aWEgZS1tYWls LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5zZW5kIGZvcmVuc2ljcyB0bzwvc3Bh bj4gOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBlLW1haWwgYWRkcmVzcyByZWNpcGllbnRz IHRvIHJlY2VpdmUgZm9yZW5zaWNzIGRhdGEgKHRoZSBuYXR0aWx5LXRpdGxlZCA8ZW0+ZnJv Z25vc3RpY3M8L2VtPikuIFlvdSBjYW4gY2hvb3NlIG5vYm9keSBpZiB5b3Ugd2lzaCB0byBk aXNhYmxlIHRoaXMgZmVhdHVyZSwgb3Igc2VuZCB0aGVtIHRvIHlvdXJzZWxmLCBvciA8YSBo cmVmPSIjc21kX2JldHRlciI+dG8gbWUgZm9yIGFuYWxheXNpczwvYT4uIDxzdHJvbmc+UGxl YXNlIG5vdGUgdGhhdCBzb21lIGRhdGEgaXMgcXVpdGUgc2Vuc2l0aXZlIGFuZCBtYXkgZGl2 dWxnZSBwYXRocyB0byB5b3VyIGZpbGVzIG9yIHNpdGU8L3N0cm9uZz4uIElmIHlvdSBwcmVm ZXIgdG8ga2VlcCBzdHVmZiBwcml2YXRlIGJ5IGFsbCBtZWFucyBzYW5pdGl6ZSB0aGUgZm9y ZW5zaWNzIGFuZCBzZW5kIHRoZSBlZGl0ZWQgaGlnaGxpZ2h0cyB0byBtZSBmb3IgYW5hbHlz aXMgaWYgeW91IHdpc2guPC9saT4KCTwvdWw+CgoJPGgzPlJlYWx0aW1lIG9wdGlvbnM8L2gz PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmJsb2NrIHJlcXVlc3QgaGVhZGVy czwvc3Bhbj4gOiBpZiB5b3UgZW5hYmxlIHRoaXMgZmFjaWxpdHkgeW91IGNhbiBlbGVjdCB0 byBibG9jayBvciBhbGxvdyBjZXJ0YWluIHR5cGVzIG9mIHNwZWljYWwgPHNwYW4gY2xhc3M9 ImNhcHMiPkhUVFA8L3NwYW4+IHJlcXVlc3QuIEFueSByZXF1ZXN0IG9mIGEgY2hlY2tlZCB0 eXBlIHdpbGwgYmUgYmxvY2tlZCBhbmQgYSBtZXNzYWdlIHdpbGwgYmUgcmV0dXJuZWQgaW5z dGVhZCBvZiB0aGUgcGFnZS4gVGhlIGNvcmUgdHlwZXMgPHNwYW4gY2xhc3M9ImNhcHMiPkdF VDwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJjYXBzIj5QT1NUPC9zcGFuPiwgPHNwYW4gY2xhc3M9 ImNhcHMiPkhFQUQ8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+T1BUSU9OUzwvc3Bh bj4gYXJlIGF1dG9tYXRpY2FsbHkgYWxsb3dlZCBiZWNhdXNlIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IHJlcXVpcmVzIHRoZW0uIFRoZSByZW1haW5pbmcgdGhyZWUgJiM4MjEy OyA8c3BhbiBjbGFzcz0iY2FwcyI+VFJBQ0U8L3NwYW4+LCA8c3BhbiBjbGFzcz0iY2FwcyI+ UFVUPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImNhcHMiPkRFTEVURTwvc3Bhbj4gJiM4MjEy OyBhcmUgc3BlY2lhbGlzdCBoZWFkZXJzIHRoYXQgYXJlbiYjODIxNzt0IHVzZWQgYnkgdGhl IGNvcmUgYnV0IG1heSBiZSByZXF1aXJlZCBieSBzb21lIHBsdWdpbnMuIFBlcm1pdCB0aGVt IGlmIHlvdSB3aXNoIGJ5IGNsZWFyaW5nIHRoZSByZWxldmFudCBjaGVjayBib3goZXMpLCBv dGhlcndpc2UgZm9yIG1heGltdW0gcHJvdGVjdGlvbiBrZWVwIHRoaXMgZmVhdHVyZSBzd2l0 Y2hlZCBvbiB3aXRoIGFsbCB0aHJlZSB0eXBlcyBvZiBoZWFkZXIgY2hlY2tlZC48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2hlY2sgZm9yIDxzcGFuIGNsYXNzPSJjYXBzIj5T UUw8L3NwYW4+IGluamVjdGlvbiBhdHRhY2tzIG9uPC9zcGFuPiA6IHRoaXMgKGV4cGVyaW1l bnRhbCkgZmVhdHVyZSBjaGVja3MgZm9yIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ LWJhc2VkIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGluamVjdGlvbiBhdHRhY2tz IGFuZCBibG9ja3MgdGhlbS4gWW91IGNhbiBjaG9vc2UgaWYgeW91IHdpc2ggdG8gbW9uaXRv ciB0aGUgcHVibGljIHNpdGUsIGFkbWluIGludGVyZmFjZSBvciBib3RoLiBOb3RlIGhvd2V2 ZXIgdGhhdCBzb21ldGltZXMgaW5zdGFsbGluZyBwbHVnaW5zIG9yIHNhdmluZyBsYXJnZSBh cnRpY2xlcyBjYW4gdHJpZ2dlciB0aGlzLCBzbyBpdCBtYXkgbm90IGJlIG9mIG11Y2ggdXNl IG9uIHRoZSBhZG1pbiBzaWRlLiBXaGVuIGFuIGF0dGFjayBpcyBkZXRlY3RlZCB0aGUgcmVx dWVzdCBpcyBibG9ja2VkIHdpdGggYSAmIzgyMTY7TmljZSB0cnkmIzgyMTc7IG1lc3NhZ2Ug YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQgaXMgYXV0 b21hdGljYWxseSBzZW50IHRvIHRoZSBmb3JlbnNpY3MgZS1tYWlsIHNvIHlvdSBjYW4gc2Vl IHdoYXQgd2FzIHN1Ym1pdHRlZC48L2xpPgoJPC91bD4KCgk8aDM+RmlsZXN5c3RlbSBvcHRp b25zPC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jaGVjayBmaWxlcyBm b3I8L3NwYW4+IDogY2hvb3NlIHdoYXQgdHlwZSBvZiBhbHRlcmF0aW9ucyB5b3Ugd2lzaCB0 byBtb25pdG9yOiBuZXcgZmlsZXMgYWRkZWQsIGZpbGVzIGRlbGV0ZWQgb3IgZmlsZXMgbW9k aWZpZWQuIEJ5IGRlZmF1bHQsIGFkZGl0aW9ucyBhcmUgbm90IHNlbGVjdGVkIGJlY2F1c2Ug aXQgaW5jdXJzIGEgKHRpbnkpIGV4dHJhIHByb2Nlc3NpbmcgcGVuYWx0eSB0byB0aGUgY2hl Y2tzLiBUaGVyZWZvcmUgaWYgeW91IHdhbnQgdG8gbW9uaXRvciBmb3IgYWRkaXRpb25zLCB5 b3UgbmVlZCB0byBvcHQtaW4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZpbGUg bG9jYXRpb25zPC9zcGFuPiA6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVz IGZyb20gd2hpY2ggeW91IHdpc2ggdG8gYmUgYWJsZSB0byBzZWxlY3QgZmlsZXMgZm9yIG1v bml0b3JpbmcuIENob29zZSBvbmx5IHRoZSB0b3AtbGV2ZWwgZm9sZGVyOyBldmVyeXRoaW5n IGJlbmVhdGggd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNlbGVjdGVkLiBJdCBkZWZhdWx0cyB0 byB5b3VyIHNpdGUgcm9vdC4gSWYgdXNpbmcgYSBtdWx0aS1zaXRlIHNldHVwIHlvdSBtYXkg aGF2ZSB0byBhbHRlciB0aGlzLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leGNs dWRlIGZvbGRlcnM8L3NwYW4+IDogc2luY2UgdGhlIGxpc3Qgb2YgZmlsZXMgdW5kZXIgeW91 ciBUZXh0cGF0dGVybiBpbnN0YWxsYXRpb24gbWF5IHBvdGVudGlhbGx5IGJlIGxhcmdlIHlv dSBjYW4gZGVzaWduYXRlIHNvbWUgZm9sZGVycyB0byBiZSBhdXRvbWF0aWNhbGx5IGV4Y2x1 ZGVkLCB3aGljaCBtYWtlcyB0aGUgZmlsZSBsaXN0IHNob3J0ZXIuIERlZmF1bHQ6IDxjb2Rl PmltYWdlcywgZmlsZXMsIHRtcDwvY29kZT4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmlnbm9yZSBmaWxlczwvc3Bhbj4gOiBzb21lIGZpbGVzLCBzdWNoIGFzIHRoZSBlcnJv cl9sb2cgZmlsZSBvbiB0eXBpY2FsIExpbnV4IGhvc3RzLCBwb3AgdXAgdW5hbm5vdW5jZWQg YW5kIHlvdSBtYXkgcGVyaW9kaWNhbGx5IGRlbGV0ZSB0aGVtLiBPbiBkZXZlbG9wbWVudCBz aXRlcyB0aGlzIGNhbiBjYXVzZSBleGNlc3NpdmUgYWxhcm1zIGR1cmluZyBkZWJ1Z2dpbmcu IFRvIG1pbmltaXNlIHRoaXMsIHlvdSBjYW4gbGlzdCBmaWxlcyBoZXJlIHRoYXQgeW91IGFs d2F5cyB3aXNoIHRvIGlnbm9yZS4gTm8gcGF0aHMgYXJlIG5lY2Vzc2FyeToganVzdCBzdXBw bHkgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlIG5hbWVzLiBOb3RlIHRoYXQgdGhl IHByb2dub3N0aWNzIGNoZWNrc3VtcyBmaWxlIGlzIGFsd2F5cyB0cmVhdGVkIGFzIGEgc3Bl Y2lhbCBjYXNlIHNvIHRoZXJlJiM4MjE3O3Mgbm8gbmVlZCB0byBsaXN0IGl0IGV4cGxpY2l0 bHkuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnByb2dub3N0aWNzIGRpcjwvc3Bh bj4gOiBUaGUgZm9sZGVyIHdoZXJlIHRoZSBwcm9nbm9zdGljcyBjaGVja3N1bXMgZmlsZSB3 aWxsIHJlc2lkZS4gVGhlIGRpcmVjdG9yeSBtdXN0IGFscmVhZHkgZXhpc3QgYW5kIGJlIHdy aXRhYmxlIG9yIHlvdXIgY2hvc2VuIGxvY2F0aW9uIHdpbGwgYmUgaWdub3JlZC48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dW5pcXVlIHByZWZpeDwvc3Bhbj4gOiBwcmVmaXgg dGhlIGNoZWNrc3VtcyBmaWxlIHdpdGggdGhpcyBzdHJpbmcuIFVzZWZ1bCB0byBhdm9pZCBm aWxlcyBjbGFzaGluZyBpZiB5b3UgYXJlIHVzaW5nIHRoZSBzYW1lIChub24tZG9jcm9vdCkg Zm9sZGVyIHRvIHN0b3JlIHRoZSBjaGVja3N1bXMgZnJvbSBtb3JlIHRoYW4gb25lIHNpdGUu PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJzbWRfaG93aXR3b3JrcyI+SG93IGl0IHdvcmtzPC9o Mj4KCgk8cD5JZGVhbGx5LCB0aGUgcGx1Z2luIHdvdWxkIGJlIGEgdGltZWQgc2NyaXB0IHRo YXQgcnVucyBldmVyeSBOIHNlY29uZHMuIEJ1dCB0aGF0IHJlcXVpcmVzIGEgcGFydGljdWxh ciBwaWVjZSBvZiBzb2Z0d2FyZSAoY3Jvbikgb24geW91ciBob3N0IGFuZCB0aGVyZSYjODIx NztzIG5vIGd1YXJhbnRlZSBpdCBleGlzdHMuIFRodXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBj YW4gJiM4MjE2O3RyaWdnZXImIzgyMTc7IHRoZSBwbHVnaW4gaXMgVGV4dHBhdHRlcm4gaXRz ZWxmLiBUaGUgcGx1Z2luIHJ1bnMgZXZlcnkgdGltZSB5b3UgaW50ZXJhY3Qgd2l0aCB0aGUg YWRtaW4gc2lkZSwgYnV0IGlmIGl0IGNoZWNrZWQgYWxsIHRoZSBmaWxlcyBhZ2FpbnN0IGFs bCB0aGUgY2hlY2tzdW1zIHlvdSBoYXZlIGNob3NlbiBvbiBldmVyeSBjbGljaywgeW91ciBh ZG1pbiBzaWRlIHdvdWxkIHNsb3cgZG93biBhIGxvdC4gVGhlIGNvbXByb21pc2UgaXMgdG8g c3BlY2lmeSBhIHRpbWVvdXQgdmFsdWUgY2FsbGVkIDxjb2RlPmNoZWNrIGZpbGVzIChhdCBt b3N0KSBldmVyeTwvY29kZT4uIFRoaXMgaXMgaG93IGl0IHdvcmtzOjwvcD4KCgk8b2w+CgkJ PGxpPldoZW4geW91IGNsaWNrIGEgdGFiIG9yIGludGVyYWN0IHdpdGggdGhlIGFkbWluIHNp ZGUsIHRoZSBwbHVnaW4gbG9va3MgYXQgd2hlbiB5b3UgPGVtPmxhc3Q8L2VtPiBjbGlja2Vk IHNvbWV0aGluZyBhbmQgYXNrcyAmIzgyMjA7aXMgaXQgZ3JlYXRlciB0aGFuIE4gKHNlY29u ZHMpPyYjODIyMTs8L2xpPgoJCTxsaT5JZiBzbywgaXQgcnVucyB0aGUgZmlsZSBjaGVja3Mg YW5kIHJlc2V0cyB0aGUgY291bnRlcjwvbGk+CgkJPGxpPklmIHRoZSB2YWx1ZSBvZiBOIGhh cyBub3QgeWV0IGJlZW4gcmVhY2hlZCwgaXQgZG9lcyBub3RoaW5nLCB0aHVzIHNhdmluZyB5 b3UgcHJlY2lvdXMgcHJvY2Vzc29yIGN5Y2xlczwvbGk+Cgk8L29sPgoKCTxwPkFsbCB0aGF0 IGlzIGdyZWF0IGlmIHlvdSYjODIxNztyZSBjb250aW51YWxseSB1c2luZyB0aGUgYWRtaW4g c2lkZSBhbmQgcHJvZHVjaW5nIGNsaWNrcyBmb3IgdGhlIHBsdWdpbiB0byBydW4uIEJ1dCBv bmNlIHlvdSBoYW5kIG92ZXIgdGhlIHNpdGUgdG8geW91ciBjbGllbnQsIHRoZXkgbWF5IG5v dCB1c2UgdGhlIGFkbWluIHNpZGUgYXMgb2Z0ZW4gYXMgeW91ICYjODIxMjsgaWYgYXQgYWxs LiBUaHVzIHlvdXIgZmlsZXMgd291bGQgcmFyZWx5L25ldmVyIGJlIGNoZWNrZWQuIEhlbmNl IHlvdSBjYW4gYXNrIHRoZSBwbHVnaW4gdG8gcmVzcG9uZCB0byBwdWJsaWMgc2lkZSBjbGlj a3MgYXMgd2VsbCBzbyB0aGF0IGFueSB0aW1lIGEgdmlzaXRvciAob3IgYm90KSBjcmF3bHMg eW91ciBwYWdlcyB0aGUgcGx1Z2luIHJ1bnMsIGNoZWNrcyBpZiB0aGUgdGltZW91dCBoYXMg YmVlbiBleGNlZWRlZCBhbmQsIGlmIHNvLCBjaGVja3MgdGhlIGZpbGVzIGFuZCByZXNldHMg dGhlIGNvdW50ZXIgKGV4YWN0bHkgYXMgaXQgd291bGQgZG8gb24gdGhlIGFkbWluIHNpZGUp LjwvcD4KCgk8cD5UaGlzIHdpbGwgcHVzaCB0aGUgcHJvY2Vzc2luZyBsb2FkIG9udG8geW91 ciBwdWJsaWMgc2l0ZSwgYnV0IHNpbmNlIGl0JiM4MjE3O3Mgb25seSBydW4gYXQgbW9zdCBv bmNlIGV2ZXJ5IE4gc2Vjb25kcyB5b3UgY2FuIGNvbnRyb2wgaG93IG11Y2ggb2YgYW4gaW1w YWN0IGl0IGhhcyBieSBtYXRjaGluZyB0aGF0IHdpdGggeW91ciBkZXNpcmUgdG8ga25vdyAm IzgyMTY7aW5zdGFudGx5JiM4MjE3OyB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCB2ZXJz dXMgdGhlIHZvbHVtZSBvZiB0cmFmZmljIC8gdmlzaXRvcnMgdG8gdGhlIHNpdGUgYW5kIGhv dyBvZnRlbiB5b3Ugd2FudCB0byBkZWxheSB0aGVpciBicm93c2luZy48L3A+CgoJPHA+VGhl IHBsdWdpbiBpcyB3cml0dGVuIHRvIGJlIGFzIHF1aWNrIGFuZCBlZmZpY2llbnQgYXMgaXQg cG9zc2libHkgY2FuIHRvIGF2b2lkIGFueSBkZWxheXM7IHRoZXJlIG1heSBiZSA8YSBocmVm PSIjc21kX2JldHRlciI+cm9vbSBmb3IgaW1wcm92ZW1lbnQ8L2E+IG9mIGNvdXJzZSEgUGxl YXNlIGJlIGF3YXJlIHRoYXQgbm8gZGV0ZWN0aW9uIHN5c3RlbSBpcyBmb29scHJvb2YgYW5k IHRoZXJlIGlzIG5vIHN1YnN0aXR1dGUgZm9yIHZpZ2lsYW5jZSBhbmQgPGEgaHJlZj0iI3Nt ZF9wd3N0cmVuZ3RoIj5nb29kIHBhc3N3b3JkczwvYT4gOi0pPC9wPgoKCTxoMiBpZD0ic21k X21vbmZpbGVzIj5Nb25pdG9yaW5nIGZpbGVzPC9oMj4KCgk8cD5DbGlja2luZyB0aGUgPGVt PkZpbGVzPC9lbT4gYnV0dG9uIHRha2VzIHlvdSB0byBhIHNjcmVlbiB3aXRoIGEgdGV4dGFy ZWEgaW4gaXQgdGhhdCBhbGxvd3MgeW91IHRvIGNob29zZSB0aGUgZmlsZXMgeW91IHdpc2gg dG8gbW9uaXRvci4gQSBjb3VudCBvZiB0aGUgY3VycmVudCBudW1iZXIgb2YgbW9uaXRvcmVk IGZpbGVzIGlzIHNob3duIGF0IHRoZSB0b3AsIGFsb25nIHdpdGggdGhlIG51bWJlciBvZiBm aWxlcyBhdmFpbGFibGUgaW4geW91ciBjaG9zZW4gZmlsZSBsb2NhdGlvbihzKS4gVGhlIGZv bGxvd2luZyBmaWxlcyB3aWxsIGJlIGluIHRoZSBsaXN0OjwvcD4KCgk8b2w+CgkJPGxpPmFs bCBmaWxlcyBpbiBhbGwgc3ViZGlyZWN0b3JpZXMgZnJvbSBhbGwgPGNvZGU+RmlsZSBsb2Nh dGlvbnM8L2NvZGU+IHlvdSBzcGVjaWZpZWQgdG8gbW9uaXRvciBpbiB0aGUgU2V0dXAgc2Ny ZWVuPC9saT4KCQk8bGk+PGVtPmV4Y2VwdDwvZW0+IGFueSBmaWxlcyBiZWxvdyB0aGUgZGly ZWN0b3JpZXMgeW91IGNob3NlIHRvIGV4Y2x1ZGU8L2xpPgoJCTxsaT48ZW0+ZXhjZXB0PC9l bT4gYW55IGZpbGUgbmFtZXMgeW91IGV4cGxpY2l0bHkgY2hvc2UgdG8gaWdub3JlPC9saT4K CQk8bGk+PGVtPmV4Y2VwdDwvZW0+IHRoZSBwcm9nbm9zdGljcyBjaGVja3N1bXMgZmlsZTwv bGk+Cgk8L29sPgoKCTxwPkF0IGZpcnN0LCBubyBmaWxlcyB3aWxsIGJlIHNlbGVjdGVkIHNv IHlvdSB3aWxsIGJlIG1vbml0b3Jpbmcgbm90aGluZy4gQ2hvb3NlIHdoaWNoIGZpbGVzIHlv dSB3aXNoIHRvIG1vbml0b3IgYW5kIHNhdmUgdGhlIGNoYW5nZXMuIFRoZSBwbHVnaW4gd2ls bCBrZWVwIHRhYnMgb24gdGhvc2UgZmlsZXMuPC9wPgoKCTxwPklmIHlvdSBoYXZlIGVsZWN0 ZWQgdG8gd2F0Y2ggZm9yIGFkZGl0aW9ucyB0byB0aGUgZmlsZSBzeXN0ZW0sIGFueSBmaWxl cyBpbiBhbnkgb2YgeW91ciBjaG9zZW4gbG9jYXRpb25zIHRoYXQgYXJlIG5vdCBjdXJyZW50 bHkgaW4gdGhlIGxpc3QgYXQgdGhlIHRpbWUgeW91IGhpdCA8ZW0+U2F2ZTwvZW0+IChyZWdh cmRsZXNzIG9mIHdoZXRoZXIgeW91IGFyZSBtb25pdG9yaW5nIHRoZW0gb3Igbm90KSB3aWxs IHRyaWdnZXIgYW4gYWxhcm0uIEdvIGFoZWFkIGFuZCB0cnkgaXQ6IGFkZCBzb21lIGZpbGVz IHRvIHlvdXIgc2VydmVyIG9yIGluc3RhbGwgYSBuZXcgdGhlbWUgb3Igc29tZXRoaW5nIGFu ZCB0aGUgcGx1Z2luIHdpbGwgdGVsbCB5b3UuPC9wPgoKCTxoMiBpZD0ic21kX2FjayI+QWNr bm93bGVkZ2luZyBhbGFybXM8L2gyPgoKCTxwPklmIG9uZSBvciBtb3JlIGZpbGVzIGFyZSBh bHRlcmVkLCBkZWxldGVkLCBvciBuZXcgZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIChkZXBlbmRp bmcgb24gd2hpY2ggYWN0aW9ucyB5b3UgaGF2ZSBlbGVjdGVkIHRvIG1vbml0b3IpIHRoZSBw bHVnaW4gd2lsbCBkZXRlY3QgdGhpcyB3aGVuIHRoZSBuZXh0IGFkbWluLSBvciBwdWJsaWMt c2lkZSBjbGljayBpcyByZWNlaXZlZCBhbmQgdGhlIHRpbWVvdXQgY3ljbGUgaXMgZXhjZWVk ZWQuIEl0IHdpbGwgdGhlbiB0YWtlIHRoZSBhY3Rpb24geW91IGNob3NlLiBOb3RlIG9mIGNv dXJzZSB0aGF0IHlvdSB3b24mIzgyMTc7dCBzZWUgdGhlIGFkbWluLXNpZGUgd2FybmluZyBp ZiBub3QgbG9nZ2VkIGluITwvcD4KCgk8cD5UaGUgbWVzc2FnZSBkZWxpdmVyZWQgdG8geW91 IGNvbnRhaW5zIGEgbGluayB0byB0aGUgQWNrbm93bGVkZ2VtZW50IHBhZ2UgKHdoaWNoIGNh biBhbHNvIGJlIHJlYWNoZWQgYnkgY2xpY2tpbmcgdGhlIDxlbT5BbGFybXM8L2VtPiBidXR0 b24gZnJvbSB0aGUgUHJvZ25vc3RpY3MgdGFiKS4gWW91IGFyZSBwcmVzZW50ZWQgd2l0aCBh IGxpc3Qgb2YgYWxsIHRoZSBmaWxlc3lzdGVtIGFsdGVyYXRpb25zLiBJZiB5b3Uga25vdyBh Ym91dCB0aGUgY2hhbmdlcyAmIzgyMTI7IGUuZy4geW91IGluaXRpYXRlZCB0aGVtIGJ5IHVw bG9hZGluZyBzb21lIG5ldyBmaWxlIHZlcnNpb24ocykgJiM4MjEyOyB0aGVuIHlvdSBjYW4g YWNrbm93bGVnZGUgdGhpcyBieSBwbGFjaW5nIGEgY2hlY2sgbWFyayBuZXh0IHRvIHRoZSBm aWxlcyB5b3Uga25vdyBjb250YWluIGxlZ2l0aW1hdGUgYWx0ZXJhdGlvbnMuIFdoZW4geW91 IGNsaWNrIHRoZSA8ZW0+QWNrbm93bGVkZ2U8L2VtPiBidXR0b24geW91IHNpZ25pZnkgdG8g dGhlIHBsdWdpbiB0aGF0IHlvdSBhY2NlcHQgdGhlIGNoYW5nZXMuIFRodXMgdGhlIG5ldyBm aWxlKHMpIGJlY29tZSB0aGUgYmFzZWxpbmUuPC9wPgoKCTxwPklmIHlvdSBhcmUgbW9uaXRv cmluZyBmaWxlIHN5c3RlbSBhZGRpdGlvbnMsIHRoZSBhY3Qgb2YgYWNrbm93bGVkZ2luZyB0 aGUgYWxhcm0gaW5kaWNhdGVzIHRoYXQgeW91IGFyZSBoYXBweSBmb3IgdGhlIG5ldyBmaWxl KHMpIHRvIGJlIG1vbml0b3JlZC4gVGhleSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYWRkZWQg dG8gdGhlIGxpc3Qgb2YgRmlsZXMgdG8gbW9uaXRvciAoeW91IGNhbiB2ZXJpZnkgdGhpcyBi eSB2aXNpdGluZyB0aGUgUHJvZ25vc3RpYyB0YWImIzgyMTc7cyA8ZW0+RmlsZXM8L2VtPiBs aXN0KS48L3A+CgoJPHA+SWYgeW91IGNob29zZSBub3QgdG8gYWNrbm93bGVkZ2Ugc29tZSBv ciBhbGwgb2YgdGhlIGZpbGVzLCB5b3Ugd2lsbCBjb250aW51ZSB0byBiZSBuYWdnZWQgYXQg eW91ciBkZXNpZ25hdGVkIGFsYXJtIGZyZXF1ZW5jeSB1bnRpbCB5b3UgYWNrbm93bGVkZ2Ug dGhlIHByb2JsZW1zIG9yIGZpeCB0aGUgZmlsZXN5c3RlbSB0byBpdHMgb3JpZ2luYWwgc3Rh dGUuIERvIGJlYXIgaW4gbWluZCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBmcmVxdWVuY3kgdGhh dCBhbGVydGluZyB0b28gb2Z0ZW4gY2FuIGFsaWVuYXRlIHVzZXJzIGFuZCBtYWtlIGFuIGFs YXJtIHNpdHVhdGlvbiBsZXNzIGVmZmVjdGl2ZS48L3A+CgoJPGgyIGlkPSJzbWRfY3NpIj5G b3JlbnNpY3M8L2gyPgoKCTxwPjxzdHJvbmc+QmVmb3JlPC9zdHJvbmc+IGFja25vd2xlZGdp bmcgYWxhcm1zLCB5b3UgbWF5IGNob29zZSB0byBzZW5kIG9mZiBmb3JlbnNpY3MgaW5mb3Jt YXRpb24gdG8gYSBkZXNpZ25hdGVkIGUtbWFpbCBhZGRyZXNzLiBUaGUgZm9sbG93aW5nIGlu Zm9ybWF0aW9uIGlzIHNlbnQ6PC9wPgoKCTx1bD4KCQk8bGk+RmlsZSBpbmZvcm1hdGlvbiBh Ym91dCBlYWNoIGNoYW5nZWQvYWRkZWQgZmlsZSwgc3VjaCBhcyBpdHMgc2l6ZSwgbW9kaWZp Y2F0aW9uIHRpbWUsIGFuZCB1c2VyIC8gZ3JvdXAgb3duZXJzaGlwPC9saT4KCQk8bGk+VGhl IGNvbnRlbnRzIG9mIHRoZSBmaWxlcyB0aGVtc2VsdmVzLCA8c3BhbiBjbGFzcz0iY2FwcyI+ QkFTRTwvc3Bhbj4tNjQgZW5jb2RlZCBpbiB0aGUgYm9keSBvZiB0aGUgZS1tYWlsPC9saT4K CQk8bGk+VGhlIG5hbWVzICZhbXA7IHBhdGhzIG9mIGFueSBkZWxldGVkIGZpbGVzPC9saT4K CQk8bGk+QW55IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGxvZyBlbnRyaWVzIHRo YXQgb2NjdXJyZWQgZWl0aGVyIHNpZGUgb2YgdGhlIGFsYXJtIGNvbmRpdGlvbiAoPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gbG9nZ2luZyBtdXN0IGJlIGVuYWJsZWQgaW4geW91 ciA8ZW0+QWRtaW4gLSZndDsgUHJlZmVyZW5jZXM8L2VtPik8L2xpPgoJPC91bD4KCgk8cD5Z b3UgY2FuIHNlbGVjdCB3aGljaCBmaWxlIGluZm9ybWF0aW9uIHRvIHNlbmQgb2ZmIHZpYSB0 aGUgY2hlY2sgYm94ZXMuIFRoZSBvbmVzIHlvdSBzZWxlY3RlZCB3aWxsIHJlbWFpbiBzZWxl Y3RlZCBmb3IgY29udmVuaWVuY2UgYWZ0ZXIgdGhlIGZvcmVuc2ljcyBoYXZlIGJlZW4gc2Vu dCwgc28geW91IG1heSBpbW1lZGlhdGVseSBoaXQgPGVtPkFja25vd2xlZGdlPC9lbT4gdG8g YWNrbm93bGVkZ2UgdGhlIG9uZXMgeW91IG5vdGlmaWVkLjwvcD4KCgk8aDIgaWQ9InNtZF9h ZHZpY2UiPkFkdmljZTwvaDI+CgoJPHA+Q2xpY2tpbmcgdGhlIDxlbT5BZHZpY2U8L2VtPiBi dXR0b24gd2lsbCBydW4gdGhyb3VnaCBhIHNlcmllcyBvZiBjaGVja3MgYW5kIG9mZmVyIHN1 Z2dlc3Rpb25zIG9uIGhvdyB0byBoYXJkZW4geW91ciBpbnN0YWxsYXRpb24uIFRoZSBtb3N0 IGltcG9ydGFudCBvbmUgdG8gZm9sbG93IGlzIGlmIHlvdSBhcmUgd2FybmVkIGFib3V0IHRo ZSBwcm9nbm9zdGljcyBjaGVja3N1bXMgZmlsZSBiZWluZyBpbiBkb2Nyb290LiBJdCBpcyBo aWdobHkgcmVjb21tZW5kZWQgdG8gbW92ZSBpdCBzb21ld2hlcmUgbm9uLXdlYiBhY2Nlc3Np YmxlLjwvcD4KCgk8aDIgaWQ9InNtZF9wd3N0cmVuZ3RoIj5QYXNzd29yZCBzdHJlbmd0aDwv aDI+CgoJPHA+QXMgYW4gYWlkIHRvIHlvdXIgdXNlcnMsIGEgcGFzc3dvcmQgc3RyZW5ndGgg bWV0ZXIgaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBvbiB0aGUgPGVtPkFkbWluIC0mZ3Q7 IFVzZXJzPC9lbT4gdGFiLiBXaGVuIHlvdSB0eXBlIHRvIGNoYW5nZSB5b3VyIHBhc3N3b3Jk LCBhbiBpbmRpY2F0aW9uIG9mIHRoZSB0aW1lIGEgY3VycmVudCBkZXNrdG9wIFBDIHdvdWxk IHRha2UgdG8gY3JhY2sgaXQgaXMgZ2l2ZW4uIEl0JiM4MjE3O3MgYSB2ZXJ5IHJvdWdoIGNh bGN1bGF0aW9uLCBhbHRob3VnaCBNb29yZSYjODIxNztzIExhdyBpcyBhdXRvbWF0aWNhbGx5 IHRha2VuIGludG8gYWNjb3VudCAodGh1cyB5b3VyIHBhc3N3b3JkIHdpbGwgYmVjb21lIHdl YWtlciBvdmVyIHRpbWUgaWYgeW91IGRvIG5vdCBjaGFuZ2UgaXQpLjwvcD4KCgk8cD5Zb3Ug d2lsbCBkbyB5b3Vyc2VsZiBhbmQgeW91ciBzeXN0ZW0gYSBodWdlIGZhdm91ciB0byBjaG9v c2UgYSBwYXNzcGhyYXNlIHRoYXQgdGFrZXMgaW4gZXhjZXNzIG9mIGEgZmV3IHRob3VzYW5k IHllYXJzIHRvIGNyYWNrLiBUaGUgbG9uZ2VyIHRoZSBiZXR0ZXIuIFJlbWVtYmVyIHRoaXMg aXMgYmFzZWQgb24gYSBicnV0ZSBmb3JjZSBhdHRhY2sgdXNpbmcgYSBzaW5nbGUgZGVza3Rv cCBQQyAmIzgyMTI7IG5vdCBhIG1haW5mcmFtZSBvciBhIFBDIGZhcm0gJiM4MjEyOyBhbmQg aXQgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgaG93IGVhc3kgdGhlIHBhc3N3b3JkIGlz IHRvIGd1ZXNzIGlmIHlvdSB1c2UgZGljdGlvbmFyeSB3b3JkcyBvciA8YSBocmVmPSJodHRw Oi8vc3RlZmRhd3Nvbi5jb20vYmxvZy9jaG9vc2luZy1hLWJyaWxsaWFudC1wYXNzd29yZCI+ c29tZSBvdGhlciBiYWQgcGFzc3dvcmQ8L2E+LiBDaG9vc2UgYSBnb29kIG9uZSBhbmQgeW91 IDxzdHJvbmc+c2lnbmlmaWNhbnRseTwvc3Ryb25nPiByZWR1Y2UgdGhlIHByb2JhYmlsaXR5 IG9mIGEgc3VjY2Vzc2Z1bCBhdHRhY2suPC9wPgoKCTxoMiBpZD0ic21kX2JldHRlciI+SGVs cCBtYWtlIHRoZSBwbHVnaW4gYmV0dGVyPC9oMj4KCgk8cD5JZiBzbWRfcHJvZ25vc3RpY3Mg ZG9lcyBkZXRlY3Qgc29tZSByb2d1ZSBlbGVtZW50cyBpbiB5b3VyIGZpbGVzeXN0ZW0sIHBs ZWFzZSBjb25zaWRlciBzZW5kaW5nIHRoZSBmb3JlbnNpY3MgdG8gcHJvZ25vc3RpY3MgW2F0 XSBzdGVmZGF3c29uIFtkb3RdIGNvbSB3aXRoIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgeW91 IHBvc3NpYmx5IGNhbi4gWW91IGNhbiBlaXRoZXIgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IGZy b20gd2l0aGluIHRoZSBwbHVnaW4gKHNlZSB0aGUgc2V0dXAgcGFnZSwgdGhvdWdoIG5vdGUg dGhlIHNlbnNpdGl2aXR5IG9mIHNvbWUgb2YgdGhlIGRhdGEgc2VudCkgb3IgY29weSBhbmQg cGFzdGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gaW50byBhbiBlLW1haWwuIFRoZSBzb3J0IG9m IHN0dWZmIHRoYXQgbWlnaHQgYmUgdXNlZnVsIGlzOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFu IGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IChhbmQvb3Igc2VydmVyKSBsb2dzIGZvciB0aGUg dGltZSBvZiB0aGUgYXR0YWNrPC9saT4KCQk8bGk+VGhlIGxpbmVzIG9mIHRoZSBmaWxlKHMp IHRoYXQgd2VyZSBhZmZlY3RlZCAob3IgdGhlIGZpbGVzIGluIHRoZWlyIGVudGlyZXR5KTwv bGk+CgkJPGxpPlRoZSBjb250ZW50IG9mIGFueSBhZGRpdGlvbmFsIGxpbmVzIGFkZGVkIG9y IGFsdGVyZWQgaW4gdGhlIGZpbGVzPC9saT4KCQk8bGk+WW91ciA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4sIE15U1FMIGFu ZCBBcGFjaGUgdmVyc2lvbnM8L2xpPgoJCTxsaT5Zb3VyIGhvc3RlciBjb21wYW55IG5hbWU8 L2xpPgoJPC91bD4KCgk8cD5hbmQgc28gb24uIEFueSBhbmQgYWxsIGluZm9ybWF0aW9uIHdp bGwgYmUgdHJlYXRlZCBpbiB0aGUgc3RyaWN0ZXN0IGNvbmZpZGVuY2Ugb2YgY291cnNlLiBB bmFseXNpbmcgdGhpcyBkYXRhIG1heSBhbGxvdyBtZSB0byBpbXByb3ZlIHRoZSBwbHVnaW4g YW5kIHBlcmhhcHMgY2xvc2UgYW55IHNlY3VyaXR5IGhvbGVzIGluIDxzcGFuIGNsYXNzPSJj YXBzIj5UWFA8L3NwYW4+IGl0c2VsZiwgb3IgZXZlbiBoZWxwIG1ha2UgdGhlIHBsdWdpbiBt b3JlIHByby1hY3RpdmUgYnkgZGV0ZWN0aW5nIHRoZSB2YXJpb3VzIGtpbmRzIG9mIGF0dGFj ayBpbiBwcm9ncmVzcyBhbmQgbWluaW1pc2luZyBkYW1hZ2UgdG8geW91ciBmaWxlIHN5c3Rl bS4gVGhhbmtzIGluIGFkdmFuY2UgZm9yIHlvdSBoZWxwLjwvcD4KCgk8aDIgaWQ9ImNoYW5n ZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjExIE5vdiAxMCB8IDAuMTAgfCBJ bml0aWFsIHJlbGVhc2U8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVH SU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGlu ZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9u dDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dy b3VuZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9j ayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxh eTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9o ZWxwIGgxIHsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRl eHQtYWxpZ246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHgg c29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fu cy1zZXJpZjsgfQojc21kX2hlbHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMt c2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFu c2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVs cCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNp bmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsg fQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFu ZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hl bHAgdGFibGUgeyB3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRv bToxZW07IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4IHNvbGlk ICM5OTk7IHBhZGRpbmc6LjVlbSAwOyB9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlw ZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpyZWQ7IH0KI3NtZF9o ZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsg eyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lOIENTUyAq KiogLS0+CiI7czozOiJtZDUiO3M6MzI6IjgzOWVjMjhmM2E1NDIwNzgyODcxYjNlYWJiODA3 ZjE1Ijt9