Online PHP and Javascript Decoder decode hidden script to uncover its real functionality




$o = "Y2xhc3Mgd3BDaGVja291dENoZWNraW5pdCB7DQoNCglmdW5jdGlvbiB3cENoZWNrb3V0Q2hlY2tpbml0KCkgew0KCQlyZXR1cm4gdHJ1ZTsJDQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2luaXRpYWxpemUoKSB7DQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCXdwX2VucXVldWVfc2NyaXB0KCR0aGlzIC0+IHBsdWdpbl9uYW1lLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy5qc1wnLCBhcnJheShcJ2pxdWVyeVwnKSwgXCcxLjBcJywgdHJ1ZSk7CQ0KCQkJd3BfZW5xdWV1ZV9zY3JpcHQoXCdjb2xvcmJveFwnLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL2NvbG9yYm94LmpzXCcsIGFycmF5KFwnanF1ZXJ5XCcpLCBmYWxzZSwgdHJ1ZSk7DQoJCQl3cF9lbnF1ZXVlX3N0eWxlKFwnY29sb3Jib3hcJywgV1BfUExVR0lOX1VSTCAuIFwnL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy9jc3MvY29sb3Jib3guY3NzXCcsIGZhbHNlLCAkdGhpcyAtPiB2ZXJzaW9uLCBcImFsbFwiKTsNCgkJCQ0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnaW5pdFwnLCBcJ2luaXRfZ2V0cG9zdFwnLCAxMCwgMSk7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfaW5pdGlhbGl6YXRpb24oKSB7CQkNCgkJJHRoaXMgLT4gdXBkYXRpbmdfcGx1Z2luKCk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBhY3Rpb24gaG9va3MNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3dwX2hlYWRcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3cF9mb290ZXJcJywgXCd3cF9mb290XCcsIDE1LCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3aWRnZXRzX2luaXRcJywgXCd3aWRnZXRfcmVnaXN0ZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwndGhlX2NvbnRlbnRcJywgXCdmaWx0ZXJfY29udGVudFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdzZWFyY2hfdGVtcGxhdGVcJywgXCdzZWFyY2hfdGVtcGxhdGVcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnZGVsZXRlX3Bvc3RcJywgXCdkZWxldGVfcG9zdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdF9nZXRwb3N0XCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdpbml0X3RleHRkb21haW5cJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwndXBkYXRpbmdfcGx1Z2luXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdnemlwX2NvbXByZXNzaW9uXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2RlbGV0ZV91c2VyXCcsIFwnZGVsZXRlX3VzZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnc2hvd191c2VyX3Byb2ZpbGVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdlZGl0X3VzZXJfcHJvZmlsZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2VkaXRfdXNlcl9wcm9maWxlX3VwZGF0ZVwnLCBcJ3BlcnNvbmFsX29wdGlvbnNfdXBkYXRlXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwncGVyc29uYWxfb3B0aW9uc191cGRhdGVcJywgXCdwZXJzb25hbF9vcHRpb25zX3VwZGF0ZVwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3Byb2ZpbGVfdXBkYXRlXCcsIFwncHJvZmlsZV91cGRhdGVcJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZnRlcl9wbHVnaW5fcm93X1wnIC4gJHRoaXMgLT4gcGx1Z2luX2ZpbGUsIFwnYWZ0ZXJfcGx1Z2luX3Jvd1wnLCAxMCwgMik7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbnN0YWxsX3BsdWdpbnNfcHJlX3BsdWdpbi1pbmZvcm1hdGlvblwnLCBcJ2Rpc3BsYXlfY2hhbmdlbG9nXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3BocG1haWxlcl9pbml0XCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKCR0aGlzIC0+IHByZSAuIFwnX29yZGVyc2NsZWFub3V0XCcsIFwnb3JkZXJzY2xlYW5vdXRcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnYWRtaW5fcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc2NyaXB0c1wnLCBcJ3ByaW50X3NjcmlwdHNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9wcmludF9zY3JpcHRzXCcsIFwncHJpbnRfc2NyaXB0c1wnKTsNCgkJDQoJCS8vQWRtaW4gQ2FsbHMNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJywgXCdhZGRfbWVudXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQlpZiAoJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3RpbnltY2VidXR0b25cJykgPT0gXCJZXCIpIHsgJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX2luaXRcJywgXCd0aW55bWNlXCcpOyB9DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3Bvc3RzX2pvaW5cJyk7DQoJCSR0aGlzIC0+IGFkZF9maWx0ZXIoXCdwb3N0c193aGVyZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3BsdWdpbl9hY3Rpb25fbGlua3NcJywgXCdwbHVnaW5fYWN0aW9uX2xpbmtzXCcsIDEwLCA0KTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQogICAgICAgICR0aGlzIC0+IGFkZF9maWx0ZXIoXCdzaXRlX3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQoJCQ0KCQlnbG9iYWwgJHdwY29TaG9ydGNvZGU7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdhY2NvdW50XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ2FjY291bnRcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnY2FydFwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXJ0XCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2NhdGVnb3JpZXNcJywgYXJyYXkoJHdwY29TaG9ydGNvZGUsIFwnY2F0ZWdvcmllc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdjYXRlZ29yeVwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXRlZ29yeVwnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0c1wnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdwcm9kdWN0c1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3Byb2R1Y3RcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc3VwcGxpZXJzXCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3N1cHBsaWVyc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdzdXBwbGllclwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdzdXBwbGllclwnKSk7DQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2dldF9zZXJpYWwoKSB7DQoJCWlmICgkc2VyaWFsID0gJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3NlcmlhbGtleVwnKSkgew0KCQkJcmV0dXJuICRzZXJpYWw7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfc2VyaWFsX3ZhbGlkKCkgew0KCQkkaG9zdCA9ICRfU0VSVkVSW1wnSFRUUF9IT1NUXCddOw0KCQkNCgkJaWYgKHByZWdfbWF0Y2goXCIvXih3d3dcXC4pKC4qKS9zaVwiLCAkaG9zdCwgJG1hdGNoZXMpKSB7DQoJCQkkd3d3aG9zdCA9ICRob3N0Ow0KCQkJJG5vbnd3d2hvc3QgPSBwcmVnX3JlcGxhY2UoXCIvXih3d3dcXC4pPy9zaVwiLCBcIlwiLCAkd3d3aG9zdCk7DQoJCX0gZWxzZSB7DQoJCQkkbm9ud3d3aG9zdCA9ICRob3N0Ow0KCQkJJHd3d2hvc3QgPSBcInd3dy5cIiAuICRob3N0OwkNCgkJfQ0KCQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0gZWxzZWlmIChzdHJ0b3VwcGVyKG1kNSgkd3d3aG9zdCAuIFwid3Bjb1wiIC4gXCJteW1hc2Vzb2V0a29la2llc2lzZm9ra2VubGVra2VyXCIpKSA9PSAkc2VyaWFsIHx8IA0KCQkJCQkJCXN0cnRvdXBwZXIobWQ1KCRub253d3dob3N0IC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpID09ICRzZXJpYWwpIHsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ==Y2xhc3Mgd3BDaGVja291dENoZWNraW5pdCB7DQoNCglmdW5jdGlvbiB3cENoZWNrb3V0Q2hlY2tpbml0KCkgew0KCQlyZXR1cm4gdHJ1ZTsJDQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2luaXRpYWxpemUoKSB7DQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCXdwX2VucXVldWVfc2NyaXB0KCR0aGlzIC0+IHBsdWdpbl9uYW1lLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy5qc1wnLCBhcnJheShcJ2pxdWVyeVwnKSwgXCcxLjBcJywgdHJ1ZSk7CQ0KCQkJd3BfZW5xdWV1ZV9zY3JpcHQoXCdjb2xvcmJveFwnLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL2NvbG9yYm94LmpzXCcsIGFycmF5KFwnanF1ZXJ5XCcpLCBmYWxzZSwgdHJ1ZSk7DQoJCQl3cF9lbnF1ZXVlX3N0eWxlKFwnY29sb3Jib3hcJywgV1BfUExVR0lOX1VSTCAuIFwnL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy9jc3MvY29sb3Jib3guY3NzXCcsIGZhbHNlLCAkdGhpcyAtPiB2ZXJzaW9uLCBcImFsbFwiKTsNCgkJCQ0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnaW5pdFwnLCBcJ2luaXRfZ2V0cG9zdFwnLCAxMCwgMSk7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfaW5pdGlhbGl6YXRpb24oKSB7CQkNCgkJJHRoaXMgLT4gdXBkYXRpbmdfcGx1Z2luKCk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBhY3Rpb24gaG9va3MNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3dwX2hlYWRcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3cF9mb290ZXJcJywgXCd3cF9mb290XCcsIDE1LCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3aWRnZXRzX2luaXRcJywgXCd3aWRnZXRfcmVnaXN0ZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwndGhlX2NvbnRlbnRcJywgXCdmaWx0ZXJfY29udGVudFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdzZWFyY2hfdGVtcGxhdGVcJywgXCdzZWFyY2hfdGVtcGxhdGVcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnZGVsZXRlX3Bvc3RcJywgXCdkZWxldGVfcG9zdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdF9nZXRwb3N0XCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdpbml0X3RleHRkb21haW5cJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwndXBkYXRpbmdfcGx1Z2luXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdnemlwX2NvbXByZXNzaW9uXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2RlbGV0ZV91c2VyXCcsIFwnZGVsZXRlX3VzZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnc2hvd191c2VyX3Byb2ZpbGVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdlZGl0X3VzZXJfcHJvZmlsZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2VkaXRfdXNlcl9wcm9maWxlX3VwZGF0ZVwnLCBcJ3BlcnNvbmFsX29wdGlvbnNfdXBkYXRlXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwncGVyc29uYWxfb3B0aW9uc191cGRhdGVcJywgXCdwZXJzb25hbF9vcHRpb25zX3VwZGF0ZVwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3Byb2ZpbGVfdXBkYXRlXCcsIFwncHJvZmlsZV91cGRhdGVcJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZnRlcl9wbHVnaW5fcm93X1wnIC4gJHRoaXMgLT4gcGx1Z2luX2ZpbGUsIFwnYWZ0ZXJfcGx1Z2luX3Jvd1wnLCAxMCwgMik7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbnN0YWxsX3BsdWdpbnNfcHJlX3BsdWdpbi1pbmZvcm1hdGlvblwnLCBcJ2Rpc3BsYXlfY2hhbmdlbG9nXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3BocG1haWxlcl9pbml0XCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKCR0aGlzIC0+IHByZSAuIFwnX29yZGVyc2NsZWFub3V0XCcsIFwnb3JkZXJzY2xlYW5vdXRcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnYWRtaW5fcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc2NyaXB0c1wnLCBcJ3ByaW50X3NjcmlwdHNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9wcmludF9zY3JpcHRzXCcsIFwncHJpbnRfc2NyaXB0c1wnKTsNCgkJDQoJCS8vQWRtaW4gQ2FsbHMNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJywgXCdhZGRfbWVudXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQlpZiAoJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3RpbnltY2VidXR0b25cJykgPT0gXCJZXCIpIHsgJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX2luaXRcJywgXCd0aW55bWNlXCcpOyB9DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3Bvc3RzX2pvaW5cJyk7DQoJCSR0aGlzIC0+IGFkZF9maWx0ZXIoXCdwb3N0c193aGVyZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3BsdWdpbl9hY3Rpb25fbGlua3NcJywgXCdwbHVnaW5fYWN0aW9uX2xpbmtzXCcsIDEwLCA0KTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQogICAgICAgICR0aGlzIC0+IGFkZF9maWx0ZXIoXCdzaXRlX3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQoJCQ0KCQlnbG9iYWwgJHdwY29TaG9ydGNvZGU7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdhY2NvdW50XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ2FjY291bnRcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnY2FydFwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXJ0XCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2NhdGVnb3JpZXNcJywgYXJyYXkoJHdwY29TaG9ydGNvZGUsIFwnY2F0ZWdvcmllc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdjYXRlZ29yeVwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXRlZ29yeVwnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0c1wnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdwcm9kdWN0c1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3Byb2R1Y3RcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc3VwcGxpZXJzXCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3N1cHBsaWVyc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdzdXBwbGllclwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdzdXBwbGllclwnKSk7DQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2dldF9zZXJpYWwoKSB7DQoJCWlmICgkc2VyaWFsID0gJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3NlcmlhbGtleVwnKSkgew0KCQkJcmV0dXJuICRzZXJpYWw7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfc2VyaWFsX3ZhbGlkKCkgew0KCQkkaG9zdCA9ICRfU0VSVkVSW1wnSFRUUF9IT1NUXCddOw0KCQkNCgkJaWYgKHByZWdfbWF0Y2goXCIvXih3d3dcXC4pKC4qKS9zaVwiLCAkaG9zdCwgJG1hdGNoZXMpKSB7DQoJCQkkd3d3aG9zdCA9ICRob3N0Ow0KCQkJJG5vbnd3d2hvc3QgPSBwcmVnX3JlcGxhY2UoXCIvXih3d3dcXC4pPy9zaVwiLCBcIlwiLCAkd3d3aG9zdCk7DQoJCX0gZWxzZSB7DQoJCQkkbm9ud3d3aG9zdCA9ICRob3N0Ow0KCQkJJHd3d2hvc3QgPSBcInd3dy5cIiAuICRob3N0OwkNCgkJfQ0KCQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0gZWxzZWlmIChzdHJ0b3VwcGVyKG1kNSgkd3d3aG9zdCAuIFwid3Bjb1wiIC4gXCJteW1hc2Vzb2V0a29la2llc2lzZm9ra2VubGVra2VyXCIpKSA9PSAkc2VyaWFsIHx8IA0KCQkJCQkJCXN0cnRvdXBwZXIobWQ1KCRub253d3dob3N0IC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpID09ICRzZXJpYWwpIHsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ==Y2xhc3Mgd3BDaGVja291dENoZWNraW5pdCB7DQoNCglmdW5jdGlvbiB3cENoZWNrb3V0Q2hlY2tpbml0KCkgew0KCQlyZXR1cm4gdHJ1ZTsJDQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2luaXRpYWxpemUoKSB7DQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCXdwX2VucXVldWVfc2NyaXB0KCR0aGlzIC0+IHBsdWdpbl9uYW1lLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy5qc1wnLCBhcnJheShcJ2pxdWVyeVwnKSwgXCcxLjBcJywgdHJ1ZSk7CQ0KCQkJd3BfZW5xdWV1ZV9zY3JpcHQoXCdjb2xvcmJveFwnLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL2NvbG9yYm94LmpzXCcsIGFycmF5KFwnanF1ZXJ5XCcpLCBmYWxzZSwgdHJ1ZSk7DQoJCQl3cF9lbnF1ZXVlX3N0eWxlKFwnY29sb3Jib3hcJywgV1BfUExVR0lOX1VSTCAuIFwnL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy9jc3MvY29sb3Jib3guY3NzXCcsIGZhbHNlLCAkdGhpcyAtPiB2ZXJzaW9uLCBcImFsbFwiKTsNCgkJCQ0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnaW5pdFwnLCBcJ2luaXRfZ2V0cG9zdFwnLCAxMCwgMSk7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfaW5pdGlhbGl6YXRpb24oKSB7CQkNCgkJJHRoaXMgLT4gdXBkYXRpbmdfcGx1Z2luKCk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBhY3Rpb24gaG9va3MNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3dwX2hlYWRcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3cF9mb290ZXJcJywgXCd3cF9mb290XCcsIDE1LCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3aWRnZXRzX2luaXRcJywgXCd3aWRnZXRfcmVnaXN0ZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwndGhlX2NvbnRlbnRcJywgXCdmaWx0ZXJfY29udGVudFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdzZWFyY2hfdGVtcGxhdGVcJywgXCdzZWFyY2hfdGVtcGxhdGVcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnZGVsZXRlX3Bvc3RcJywgXCdkZWxldGVfcG9zdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdF9nZXRwb3N0XCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdpbml0X3RleHRkb21haW5cJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwndXBkYXRpbmdfcGx1Z2luXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdnemlwX2NvbXByZXNzaW9uXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2RlbGV0ZV91c2VyXCcsIFwnZGVsZXRlX3VzZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnc2hvd191c2VyX3Byb2ZpbGVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdlZGl0X3VzZXJfcHJvZmlsZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2VkaXRfdXNlcl9wcm9maWxlX3VwZGF0ZVwnLCBcJ3BlcnNvbmFsX29wdGlvbnNfdXBkYXRlXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwncGVyc29uYWxfb3B0aW9uc191cGRhdGVcJywgXCdwZXJzb25hbF9vcHRpb25zX3VwZGF0ZVwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3Byb2ZpbGVfdXBkYXRlXCcsIFwncHJvZmlsZV91cGRhdGVcJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZnRlcl9wbHVnaW5fcm93X1wnIC4gJHRoaXMgLT4gcGx1Z2luX2ZpbGUsIFwnYWZ0ZXJfcGx1Z2luX3Jvd1wnLCAxMCwgMik7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbnN0YWxsX3BsdWdpbnNfcHJlX3BsdWdpbi1pbmZvcm1hdGlvblwnLCBcJ2Rpc3BsYXlfY2hhbmdlbG9nXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3BocG1haWxlcl9pbml0XCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKCR0aGlzIC0+IHByZSAuIFwnX29yZGVyc2NsZWFub3V0XCcsIFwnb3JkZXJzY2xlYW5vdXRcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnYWRtaW5fcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc2NyaXB0c1wnLCBcJ3ByaW50X3NjcmlwdHNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9wcmludF9zY3JpcHRzXCcsIFwncHJpbnRfc2NyaXB0c1wnKTsNCgkJDQoJCS8vQWRtaW4gQ2FsbHMNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJywgXCdhZGRfbWVudXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQlpZiAoJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3RpbnltY2VidXR0b25cJykgPT0gXCJZXCIpIHsgJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX2luaXRcJywgXCd0aW55bWNlXCcpOyB9DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3Bvc3RzX2pvaW5cJyk7DQoJCSR0aGlzIC0+IGFkZF9maWx0ZXIoXCdwb3N0c193aGVyZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3BsdWdpbl9hY3Rpb25fbGlua3NcJywgXCdwbHVnaW5fYWN0aW9uX2xpbmtzXCcsIDEwLCA0KTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQogICAgICAgICR0aGlzIC0+IGFkZF9maWx0ZXIoXCdzaXRlX3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQoJCQ0KCQlnbG9iYWwgJHdwY29TaG9ydGNvZGU7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdhY2NvdW50XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ2FjY291bnRcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnY2FydFwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXJ0XCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2NhdGVnb3JpZXNcJywgYXJyYXkoJHdwY29TaG9ydGNvZGUsIFwnY2F0ZWdvcmllc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdjYXRlZ29yeVwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXRlZ29yeVwnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0c1wnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdwcm9kdWN0c1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3Byb2R1Y3RcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc3VwcGxpZXJzXCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3N1cHBsaWVyc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdzdXBwbGllclwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdzdXBwbGllclwnKSk7DQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2dldF9zZXJpYWwoKSB7DQoJCWlmICgkc2VyaWFsID0gJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3NlcmlhbGtleVwnKSkgew0KCQkJcmV0dXJuICRzZXJpYWw7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfc2VyaWFsX3ZhbGlkKCkgew0KCQkkaG9zdCA9ICRfU0VSVkVSW1wnSFRUUF9IT1NUXCddOw0KCQkNCgkJaWYgKHByZWdfbWF0Y2goXCIvXih3d3dcXC4pKC4qKS9zaVwiLCAkaG9zdCwgJG1hdGNoZXMpKSB7DQoJCQkkd3d3aG9zdCA9ICRob3N0Ow0KCQkJJG5vbnd3d2hvc3QgPSBwcmVnX3JlcGxhY2UoXCIvXih3d3dcXC4pPy9zaVwiLCBcIlwiLCAkd3d3aG9zdCk7DQoJCX0gZWxzZSB7DQoJCQkkbm9ud3d3aG9zdCA9ICRob3N0Ow0KCQkJJHd3d2hvc3QgPSBcInd3dy5cIiAuICRob3N0OwkNCgkJfQ0KCQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0gZWxzZWlmIChzdHJ0b3VwcGVyKG1kNSgkd3d3aG9zdCAuIFwid3Bjb1wiIC4gXCJteW1hc2Vzb2V0a29la2llc2lzZm9ra2VubGVra2VyXCIpKSA9PSAkc2VyaWFsIHx8IA0KCQkJCQkJCXN0cnRvdXBwZXIobWQ1KCRub253d3dob3N0IC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpID09ICRzZXJpYWwpIHsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ==Y2xhc3Mgd3BDaGVja291dENoZWNraW5pdCB7DQoNCglmdW5jdGlvbiB3cENoZWNrb3V0Q2hlY2tpbml0KCkgew0KCQlyZXR1cm4gdHJ1ZTsJDQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2luaXRpYWxpemUoKSB7DQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCXdwX2VucXVldWVfc2NyaXB0KCR0aGlzIC0+IHBsdWdpbl9uYW1lLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy5qc1wnLCBhcnJheShcJ2pxdWVyeVwnKSwgXCcxLjBcJywgdHJ1ZSk7CQ0KCQkJd3BfZW5xdWV1ZV9zY3JpcHQoXCdjb2xvcmJveFwnLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL2NvbG9yYm94LmpzXCcsIGFycmF5KFwnanF1ZXJ5XCcpLCBmYWxzZSwgdHJ1ZSk7DQoJCQl3cF9lbnF1ZXVlX3N0eWxlKFwnY29sb3Jib3hcJywgV1BfUExVR0lOX1VSTCAuIFwnL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy9jc3MvY29sb3Jib3guY3NzXCcsIGZhbHNlLCAkdGhpcyAtPiB2ZXJzaW9uLCBcImFsbFwiKTsNCgkJCQ0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnaW5pdFwnLCBcJ2luaXRfZ2V0cG9zdFwnLCAxMCwgMSk7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfaW5pdGlhbGl6YXRpb24oKSB7CQkNCgkJJHRoaXMgLT4gdXBkYXRpbmdfcGx1Z2luKCk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBhY3Rpb24gaG9va3MNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3dwX2hlYWRcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3cF9mb290ZXJcJywgXCd3cF9mb290XCcsIDE1LCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3aWRnZXRzX2luaXRcJywgXCd3aWRnZXRfcmVnaXN0ZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwndGhlX2NvbnRlbnRcJywgXCdmaWx0ZXJfY29udGVudFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdzZWFyY2hfdGVtcGxhdGVcJywgXCdzZWFyY2hfdGVtcGxhdGVcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnZGVsZXRlX3Bvc3RcJywgXCdkZWxldGVfcG9zdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdF9nZXRwb3N0XCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdpbml0X3RleHRkb21haW5cJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwndXBkYXRpbmdfcGx1Z2luXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdnemlwX2NvbXByZXNzaW9uXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2RlbGV0ZV91c2VyXCcsIFwnZGVsZXRlX3VzZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnc2hvd191c2VyX3Byb2ZpbGVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdlZGl0X3VzZXJfcHJvZmlsZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2VkaXRfdXNlcl9wcm9maWxlX3VwZGF0ZVwnLCBcJ3BlcnNvbmFsX29wdGlvbnNfdXBkYXRlXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwncGVyc29uYWxfb3B0aW9uc191cGRhdGVcJywgXCdwZXJzb25hbF9vcHRpb25zX3VwZGF0ZVwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3Byb2ZpbGVfdXBkYXRlXCcsIFwncHJvZmlsZV91cGRhdGVcJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZnRlcl9wbHVnaW5fcm93X1wnIC4gJHRoaXMgLT4gcGx1Z2luX2ZpbGUsIFwnYWZ0ZXJfcGx1Z2luX3Jvd1wnLCAxMCwgMik7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbnN0YWxsX3BsdWdpbnNfcHJlX3BsdWdpbi1pbmZvcm1hdGlvblwnLCBcJ2Rpc3BsYXlfY2hhbmdlbG9nXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3BocG1haWxlcl9pbml0XCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKCR0aGlzIC0+IHByZSAuIFwnX29yZGVyc2NsZWFub3V0XCcsIFwnb3JkZXJzY2xlYW5vdXRcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnYWRtaW5fcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc2NyaXB0c1wnLCBcJ3ByaW50X3NjcmlwdHNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9wcmludF9zY3JpcHRzXCcsIFwncHJpbnRfc2NyaXB0c1wnKTsNCgkJDQoJCS8vQWRtaW4gQ2FsbHMNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJywgXCdhZGRfbWVudXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQlpZiAoJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3RpbnltY2VidXR0b25cJykgPT0gXCJZXCIpIHsgJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX2luaXRcJywgXCd0aW55bWNlXCcpOyB9DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3Bvc3RzX2pvaW5cJyk7DQoJCSR0aGlzIC0+IGFkZF9maWx0ZXIoXCdwb3N0c193aGVyZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3BsdWdpbl9hY3Rpb25fbGlua3NcJywgXCdwbHVnaW5fYWN0aW9uX2xpbmtzXCcsIDEwLCA0KTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQogICAgICAgICR0aGlzIC0+IGFkZF9maWx0ZXIoXCdzaXRlX3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQoJCQ0KCQlnbG9iYWwgJHdwY29TaG9ydGNvZGU7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdhY2NvdW50XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ2FjY291bnRcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnY2FydFwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXJ0XCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2NhdGVnb3JpZXNcJywgYXJyYXkoJHdwY29TaG9ydGNvZGUsIFwnY2F0ZWdvcmllc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdjYXRlZ29yeVwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXRlZ29yeVwnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0c1wnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdwcm9kdWN0c1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3Byb2R1Y3RcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc3VwcGxpZXJzXCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3N1cHBsaWVyc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdzdXBwbGllclwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdzdXBwbGllclwnKSk7DQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2dldF9zZXJpYWwoKSB7DQoJCWlmICgkc2VyaWFsID0gJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3NlcmlhbGtleVwnKSkgew0KCQkJcmV0dXJuICRzZXJpYWw7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfc2VyaWFsX3ZhbGlkKCkgew0KCQkkaG9zdCA9ICRfU0VSVkVSW1wnSFRUUF9IT1NUXCddOw0KCQkNCgkJaWYgKHByZWdfbWF0Y2goXCIvXih3d3dcXC4pKC4qKS9zaVwiLCAkaG9zdCwgJG1hdGNoZXMpKSB7DQoJCQkkd3d3aG9zdCA9ICRob3N0Ow0KCQkJJG5vbnd3d2hvc3QgPSBwcmVnX3JlcGxhY2UoXCIvXih3d3dcXC4pPy9zaVwiLCBcIlwiLCAkd3d3aG9zdCk7DQoJCX0gZWxzZSB7DQoJCQkkbm9ud3d3aG9zdCA9ICRob3N0Ow0KCQkJJHd3d2hvc3QgPSBcInd3dy5cIiAuICRob3N0OwkNCgkJfQ0KCQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0gZWxzZWlmIChzdHJ0b3VwcGVyKG1kNSgkd3d3aG9zdCAuIFwid3Bjb1wiIC4gXCJteW1hc2Vzb2V0a29la2llc2lzZm9ra2VubGVra2VyXCIpKSA9PSAkc2VyaWFsIHx8IA0KCQkJCQkJCXN0cnRvdXBwZXIobWQ1KCRub253d3dob3N0IC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpID09ICRzZXJpYWwpIHsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ==Y2xhc3Mgd3BDaGVja291dENoZWNraW5pdCB7DQoNCglmdW5jdGlvbiB3cENoZWNrb3V0Q2hlY2tpbml0KCkgew0KCQlyZXR1cm4gdHJ1ZTsJDQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2luaXRpYWxpemUoKSB7DQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCXdwX2VucXVldWVfc2NyaXB0KCR0aGlzIC0+IHBsdWdpbl9uYW1lLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy5qc1wnLCBhcnJheShcJ2pxdWVyeVwnKSwgXCcxLjBcJywgdHJ1ZSk7CQ0KCQkJd3BfZW5xdWV1ZV9zY3JpcHQoXCdjb2xvcmJveFwnLCBXUF9QTFVHSU5fVVJMIC4gXCcvXCcgLiAkdGhpcyAtPiBwbHVnaW5fbmFtZSAuIFwnL2pzL2NvbG9yYm94LmpzXCcsIGFycmF5KFwnanF1ZXJ5XCcpLCBmYWxzZSwgdHJ1ZSk7DQoJCQl3cF9lbnF1ZXVlX3N0eWxlKFwnY29sb3Jib3hcJywgV1BfUExVR0lOX1VSTCAuIFwnL1wnIC4gJHRoaXMgLT4gcGx1Z2luX25hbWUgLiBcJy9jc3MvY29sb3Jib3guY3NzXCcsIGZhbHNlLCAkdGhpcyAtPiB2ZXJzaW9uLCBcImFsbFwiKTsNCgkJCQ0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnaW5pdFwnLCBcJ2luaXRfZ2V0cG9zdFwnLCAxMCwgMSk7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfaW5pdGlhbGl6YXRpb24oKSB7CQkNCgkJJHRoaXMgLT4gdXBkYXRpbmdfcGx1Z2luKCk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBhY3Rpb24gaG9va3MNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3dwX2hlYWRcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3cF9mb290ZXJcJywgXCd3cF9mb290XCcsIDE1LCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCd3aWRnZXRzX2luaXRcJywgXCd3aWRnZXRfcmVnaXN0ZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwndGhlX2NvbnRlbnRcJywgXCdmaWx0ZXJfY29udGVudFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdzZWFyY2hfdGVtcGxhdGVcJywgXCdzZWFyY2hfdGVtcGxhdGVcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnZGVsZXRlX3Bvc3RcJywgXCdkZWxldGVfcG9zdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdFwnLCAxMCwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnaW5pdF9nZXRwb3N0XCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdpbml0X3RleHRkb21haW5cJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwndXBkYXRpbmdfcGx1Z2luXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCdnemlwX2NvbXByZXNzaW9uXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2RlbGV0ZV91c2VyXCcsIFwnZGVsZXRlX3VzZXJcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnc2hvd191c2VyX3Byb2ZpbGVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdlZGl0X3VzZXJfcHJvZmlsZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2VkaXRfdXNlcl9wcm9maWxlX3VwZGF0ZVwnLCBcJ3BlcnNvbmFsX29wdGlvbnNfdXBkYXRlXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwncGVyc29uYWxfb3B0aW9uc191cGRhdGVcJywgXCdwZXJzb25hbF9vcHRpb25zX3VwZGF0ZVwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3Byb2ZpbGVfdXBkYXRlXCcsIFwncHJvZmlsZV91cGRhdGVcJywgMSwgMSk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZnRlcl9wbHVnaW5fcm93X1wnIC4gJHRoaXMgLT4gcGx1Z2luX2ZpbGUsIFwnYWZ0ZXJfcGx1Z2luX3Jvd1wnLCAxMCwgMik7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbnN0YWxsX3BsdWdpbnNfcHJlX3BsdWdpbi1pbmZvcm1hdGlvblwnLCBcJ2Rpc3BsYXlfY2hhbmdlbG9nXCcsIDEwLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ3BocG1haWxlcl9pbml0XCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKCR0aGlzIC0+IHByZSAuIFwnX29yZGVyc2NsZWFub3V0XCcsIFwnb3JkZXJzY2xlYW5vdXRcJywgMTAsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnYWRtaW5fcHJpbnRfc3R5bGVzXCcsIFwncHJpbnRfc3R5bGVzXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfcHJpbnRfc2NyaXB0c1wnLCBcJ3ByaW50X3NjcmlwdHNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9wcmludF9zY3JpcHRzXCcsIFwncHJpbnRfc2NyaXB0c1wnKTsNCgkJDQoJCS8vQWRtaW4gQ2FsbHMNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJywgXCdhZGRfbWVudXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQlpZiAoJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3RpbnltY2VidXR0b25cJykgPT0gXCJZXCIpIHsgJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX2luaXRcJywgXCd0aW55bWNlXCcpOyB9DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3Bvc3RzX2pvaW5cJyk7DQoJCSR0aGlzIC0+IGFkZF9maWx0ZXIoXCdwb3N0c193aGVyZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3BsdWdpbl9hY3Rpb25fbGlua3NcJywgXCdwbHVnaW5fYWN0aW9uX2xpbmtzXCcsIDEwLCA0KTsNCgkJJHRoaXMgLT4gYWRkX2ZpbHRlcihcJ3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQogICAgICAgICR0aGlzIC0+IGFkZF9maWx0ZXIoXCdzaXRlX3RyYW5zaWVudF91cGRhdGVfcGx1Z2luc1wnLCBcJ2NoZWNrX3VwZGF0ZVwnLCAxMCwgMSk7DQoJCQ0KCQlnbG9iYWwgJHdwY29TaG9ydGNvZGU7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdhY2NvdW50XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ2FjY291bnRcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnY2FydFwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXJ0XCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2NhdGVnb3JpZXNcJywgYXJyYXkoJHdwY29TaG9ydGNvZGUsIFwnY2F0ZWdvcmllc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdjYXRlZ29yeVwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdjYXRlZ29yeVwnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0c1wnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdwcm9kdWN0c1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdwcm9kdWN0XCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3Byb2R1Y3RcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc3VwcGxpZXJzXCcsIGFycmF5KCR3cGNvU2hvcnRjb2RlLCBcJ3N1cHBsaWVyc1wnKSk7DQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCdzdXBwbGllclwnLCBhcnJheSgkd3Bjb1Nob3J0Y29kZSwgXCdzdXBwbGllclwnKSk7DQoJfQ0KCQ0KCWZ1bmN0aW9uIGNpX2dldF9zZXJpYWwoKSB7DQoJCWlmICgkc2VyaWFsID0gJHRoaXMgLT4gZ2V0X29wdGlvbihcJ3NlcmlhbGtleVwnKSkgew0KCQkJcmV0dXJuICRzZXJpYWw7DQoJCX0NCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfc2VyaWFsX3ZhbGlkKCkgew0KCQkkaG9zdCA9ICRfU0VSVkVSW1wnSFRUUF9IT1NUXCddOw0KCQkNCgkJaWYgKHByZWdfbWF0Y2goXCIvXih3d3dcXC4pKC4qKS9zaVwiLCAkaG9zdCwgJG1hdGNoZXMpKSB7DQoJCQkkd3d3aG9zdCA9ICRob3N0Ow0KCQkJJG5vbnd3d2hvc3QgPSBwcmVnX3JlcGxhY2UoXCIvXih3d3dcXC4pPy9zaVwiLCBcIlwiLCAkd3d3aG9zdCk7DQoJCX0gZWxzZSB7DQoJCQkkbm9ud3d3aG9zdCA9ICRob3N0Ow0KCQkJJHd3d2hvc3QgPSBcInd3dy5cIiAuICRob3N0OwkNCgkJfQ0KCQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0gZWxzZWlmIChzdHJ0b3VwcGVyKG1kNSgkd3d3aG9zdCAuIFwid3Bjb1wiIC4gXCJteW1hc2Vzb2V0a29la2llc2lzZm9ra2VubGVra2VyXCIpKSA9PSAkc2VyaWFsIHx8IA0KCQkJCQkJCXN0cnRvdXBwZXIobWQ1KCRub253d3dob3N0IC4gXCJ3cGNvXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpID09ICRzZXJpYWwpIHsNCgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ=="; class wpCheckoutCheckinit {

	function wpCheckoutCheckinit() {
		return true;	
	}
	
	function ci_initialize() {
		if ($this -> ci_serial_valid()) {
			$this -> ci_initialization();
		} else {
			wp_enqueue_script($this -> plugin_name, WP_PLUGIN_URL . '/' . $this -> plugin_name . '/js/' . $this -> plugin_name . '.js', array('jquery'), '1.0', true);	
			wp_enqueue_script('colorbox', WP_PLUGIN_URL . '/' . $this -> plugin_name . '/js/colorbox.js', array('jquery'), false, true);
			wp_enqueue_style('colorbox', WP_PLUGIN_URL . '/' . $this -> plugin_name . '/css/colorbox.css', false, $this -> version, "all");
			
			$this -> add_action('admin_notices');
			$this -> add_action('init', 'init_getpost', 10, 1);
		}
		
		return false;
	}
	
	function ci_initialization() {		
		$this -> updating_plugin();
		
		//WordPress action hooks
		$this -> add_action('wp_head');
		$this -> add_action('wp_footer', 'wp_foot', 15, 1);
		$this -> add_action('admin_notices');
		$this -> add_action('widgets_init', 'widget_register', 10, 1);
		$this -> add_action('the_content', 'filter_content', 10, 1);
		$this -> add_action('search_template', 'search_template', 10, 1);
		$this -> add_action('delete_post', 'delete_post', 10, 1);
		$this -> add_action('init', 'init', 10, 1);
		$this -> add_action('init', 'init_getpost', 10, 1);
		$this -> add_action('init', 'init_textdomain', 1, 1);
		$this -> add_action('init', 'updating_plugin', 10, 1);
		$this -> add_action('init', 'gzip_compression', 10, 1);
		$this -> add_action('delete_user', 'delete_user', 10, 1);
		$this -> add_action('show_user_profile');
		$this -> add_action('edit_user_profile');
		$this -> add_action('edit_user_profile_update', 'personal_options_update', 1, 1);
		$this -> add_action('personal_options_update', 'personal_options_update', 1, 1);
		$this -> add_action('profile_update', 'profile_update', 1, 1);
		$this -> add_action('after_plugin_row_' . $this -> plugin_file, 'after_plugin_row', 10, 2);
		$this -> add_action('install_plugins_pre_plugin-information', 'display_changelog', 10, 1);
		$this -> add_action('phpmailer_init');
		$this -> add_action($this -> pre . '_orderscleanout', 'orderscleanout', 10, 1);
		$this -> add_action('wp_print_styles', 'print_styles');
		$this -> add_action('admin_print_styles', 'print_styles');
		$this -> add_action('wp_print_scripts', 'print_scripts');
		$this -> add_action('admin_print_scripts', 'print_scripts');
		
		//Admin Calls
		$this -> add_action('admin_menu', 'add_menus');
		$this -> add_action('admin_head');
		if ($this -> get_option('tinymcebutton') == "Y") { $this -> add_action('admin_init', 'tinymce'); }
		
		//WordPress filter hooks
		$this -> add_filter('posts_join');
		$this -> add_filter('posts_where');
		$this -> add_filter('plugin_action_links', 'plugin_action_links', 10, 4);
		$this -> add_filter('transient_update_plugins', 'check_update', 10, 1);
        $this -> add_filter('site_transient_update_plugins', 'check_update', 10, 1);
		
		global $wpcoShortcode;
		add_shortcode($this -> pre . 'account', array($wpcoShortcode, 'account'));
		add_shortcode($this -> pre . 'cart', array($wpcoShortcode, 'cart'));
		add_shortcode($this -> pre . 'categories', array($wpcoShortcode, 'categories'));
		add_shortcode($this -> pre . 'category', array($wpcoShortcode, 'category'));
		add_shortcode($this -> pre . 'products', array($wpcoShortcode, 'products'));
		add_shortcode($this -> pre . 'product', array($wpcoShortcode, 'product'));
		add_shortcode($this -> pre . 'suppliers', array($wpcoShortcode, 'suppliers'));
		add_shortcode($this -> pre . 'supplier', array($wpcoShortcode, 'supplier'));
	}
	
	function ci_get_serial() {
		if ($serial = $this -> get_option('serialkey')) {
			return $serial;
		}
		
		return false;
	}
	
	function ci_serial_valid() {
		$host = $_SERVER['HTTP_HOST'];
		
		if (preg_match("/^(www\.)(.*)/si", $host, $matches)) {
			$wwwhost = $host;
			$nonwwwhost = preg_replace("/^(www\.)?/si", "", $wwwhost);
		} else {
			$nonwwwhost = $host;
			$wwwhost = "www." . $host;	
		}
		
		if ($_SERVER['HTTP_HOST'] == "localhost" || $_SERVER['HTTP_HOST'] == "localhost:" . $_SERVER['SERVER_PORT']) {
			return true;	
		} else {
			if ($serial = $this -> ci_get_serial()) {			
				if ($serial == strtoupper(md5($_SERVER['HTTP_HOST'] . "wpcomymasesoetkoekiesisfokkenlekker"))) {
					return true;
				} elseif (strtoupper(md5($wwwhost . "wpcomymasesoetkoekiesisfokkenlekker")) == $serial || 
							strtoupper(md5($nonwwwhost . "wpcomymasesoetkoekiesisfokkenlekker")) == $serial) {
					return true;
				}
			}
		}
		
		return false;
	}
}



© 2023 Quttera Ltd. All rights reserved.