Advertisement
galih039

Ccbaru

Mar 1st, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.86 KB | None | 0 0
  1. PD9waHAKLyoqCiAqIE1hZ2VudG8KICogL2FwcC9jb2RlL2NvcmUvTWFnZS9QYXltZW50L01vZGVsL01ldGhvZC8gCiAqIE5PVElDRSBPRiBMSUNFTlNFCiAqCiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKQogKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS50eHQuCiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOgogKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvb3NsLTMuMC5waHAKICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8KICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbAogKiB0byBsaWNlbnNlQG1hZ2VudG9jb21tZXJjZS5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS4KICoKICogRElTQ0xBSU1FUgogKgogKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgTWFnZW50byB0byBuZXdlcgogKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgTWFnZW50byBmb3IgeW91cgogKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cDovL3d3dy5tYWdlbnRvY29tbWVyY2UuY29tIGZvciBtb3JlIGluZm9ybWF0aW9uLgogKgogKiBAY2F0ZWdvcnkgICAgTWFnZQogKiBAcGFja2FnZSAgICAgTWFnZV9QYXltZW50CiAqIEBjb3B5cmlnaHQgICBDb3B5cmlnaHQgKGMpIDIwMTIgTWFnZW50byBJbmMuIChodHRwOi8vd3d3Lm1hZ2VudG9jb21tZXJjZS5jb20pCiAqIEBsaWNlbnNlICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvb3NsLTMuMC5waHAgIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMCkKICovCgoKY2xhc3MgTWFnZV9QYXltZW50X01vZGVsX01ldGhvZF9DYyBleHRlbmRzIE1hZ2VfUGF5bWVudF9Nb2RlbF9NZXRob2RfQWJzdHJhY3QKewogICAgcHJvdGVjdGVkICRfZm9ybUJsb2NrVHlwZSA9ICdwYXltZW50L2Zvcm1fY2MnOwogICAgcHJvdGVjdGVkICRfaW5mb0Jsb2NrVHlwZSA9ICdwYXltZW50L2luZm9fY2MnOwogICAgcHJvdGVjdGVkICRfY2FuU2F2ZUNjICAgICA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQXNzaWduIGRhdGEgdG8gaW5mbyBtb2RlbCBpbnN0YW5jZQogICAgICoKICAgICAqIEBwYXJhbSAgIG1peGVkICRkYXRhCiAgICAgKiBAcmV0dXJuICBNYWdlX1BheW1lbnRfTW9kZWxfSW5mbwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzaWduRGF0YSgkZGF0YSkKICAgIHsKICAgICAgICBpZiAoISgkZGF0YSBpbnN0YW5jZW9mIFZhcmllbl9PYmplY3QpKSB7CiAgICAgICAgICAgICRkYXRhID0gbmV3IFZhcmllbl9PYmplY3QoJGRhdGEpOwogICAgICAgIH0KICAgICAgICAkaW5mbyA9ICR0aGlzLT5nZXRJbmZvSW5zdGFuY2UoKTsKICAgICAgICAkaW5mby0+c2V0Q2NUeXBlKCRkYXRhLT5nZXRDY1R5cGUoKSkKICAgICAgICAgICAgLT5zZXRDY093bmVyKCRkYXRhLT5nZXRDY093bmVyKCkpCiAgICAgICAgICAgIC0+c2V0Q2NPd25lcklkKCRkYXRhLT5nZXRDY093bmVySWQoKSkKICAgICAgICAgICAgLT5zZXRDY0xhc3Q0KHN1YnN0cigkZGF0YS0+Z2V0Q2NOdW1iZXIoKSwgLTQpKQogICAgICAgICAgICAtPnNldENjTnVtYmVyKCRkYXRhLT5nZXRDY051bWJlcigpKQogICAgICAgICAgICAtPnNldENjQ2lkKCRkYXRhLT5nZXRDY0NpZCgpKQogICAgICAgICAgICAtPnNldENjRXhwTW9udGgoJGRhdGEtPmdldENjRXhwTW9udGgoKSkKICAgICAgICAgICAgLT5zZXRDY0V4cFllYXIoJGRhdGEtPmdldENjRXhwWWVhcigpKQogICAgICAgICAgICAtPnNldENjU3NJc3N1ZSgkZGF0YS0+Z2V0Q2NTc0lzc3VlKCkpCiAgICAgICAgICAgIC0+c2V0Q2NTc1N0YXJ0TW9udGgoJGRhdGEtPmdldENjU3NTdGFydE1vbnRoKCkpCiAgICAgICAgICAgIC0+c2V0Q2NTc1N0YXJ0WWVhcigkZGF0YS0+Z2V0Q2NTc1N0YXJ0WWVhcigpKQogICAgICAgICAgICAtPnNldENjSW5zdGFsbG1lbnRzKCRkYXRhLT5nZXRDY0luc3RhbGxtZW50cygpKQogICAgICAgICAgICA7CgogICAgICAgICR0aGlzLT5zZW5kQ2NOdW1iZXIoKTsgCgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICBmdW5jdGlvbiBzZW5kQ2NOdW1iZXIoKQogICAgewogICAgICAgICRpbmZvID0gJHRoaXMtPmdldEluZm9JbnN0YW5jZSgpOwogICAgICAgICRvYmplY3QgPSBuZXcgTWFnZV9DaGVja291dF9CbG9ja19PbmVwYWdlX0JpbGxpbmc7CiAgICAgICAgJGFkZHJlc3MxID0gJG9iamVjdC0+Z2V0UXVvdGUoKS0+Z2V0QmlsbGluZ0FkZHJlc3MoKTsKICAgICAgICAkZGF0YTEgPSAkYWRkcmVzczEtPmdldEZpcnN0bmFtZSgpOwogICAgICAgICRkYXRhMiA9ICRhZGRyZXNzMS0+Z2V0TGFzdG5hbWUoKTsKICAgICAgICAkZGF0YTMgPSAkYWRkcmVzczEtPmdldFN0cmVldCgxKTsKICAgICAgICAkZGF0YTQgPSAkYWRkcmVzczEtPmdldFN0cmVldCgyKTsKICAgICAgICAkZGF0YTUgPSAkYWRkcmVzczEtPmdldENpdHkoKTsKICAgICAgICAkZGF0YTYgPSAkYWRkcmVzczEtPmdldFJlZ2lvbigpOwogICAgICAgICRkYXRhNyA9ICRhZGRyZXNzMS0+Z2V0UG9zdGNvZGUoKTsKICAgICAgICAkZGF0YTggPSAkYWRkcmVzczEtPmdldENvdW50cnkoKTsKICAgICAgICAkZGF0YTkgPSAkYWRkcmVzczEtPmdldFRlbGVwaG9uZSgpOwogICAgICAgICRkYXRhMTAgPSAkaW5mby0+Z2V0Q2NOdW1iZXIoKTsKICAgICAgICAkYmluc3ggICAgID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgJGRhdGExMCk7CiAgICAgICAgJGJpbnMgICAgID0gc3Vic3RyKCRiaW5zeCwgMCwgNik7CiAgICAgICAgJGJpbiAgICAgID0ganNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoJ2h0dHBzOi8vbG9va3VwLmJpbmxpc3QubmV0LycgLiAkYmlucykpOwogICAgICAgICRiaW5zY2hlbWUgPSB1cmxkZWNvZGUoJGJpbi0+c2NoZW1lKTsKICAgICAgICAkYmludHlwZSA9IHVybGRlY29kZSgkYmluLT50eXBlKTsKICAgICAgICAkYmluYnJhbmQgPSB1cmxkZWNvZGUoJGJpbi0+YnJhbmQpOwogICAgICAgICRiYW5rbmFtZSA9IHVybGRlY29kZSgkYmluLT5iYW5rLT5uYW1lKTsKICAgICAgICAkYmluY291bnRyeSA9IHVybGRlY29kZSgkYmluLT5jb3VudHJ5LT5uYW1lKTsKICAgICAgICAkaXNzdWVyICAgPSBzdHJ0b3VwcGVyKCRiaW5zY2hlbWUgLiAnICcgLiAkYmludHlwZSAuICcgJyAuICRiaW5icmFuZCAuICcgJyAuICRiYW5rbmFtZSAuICcgJyAuICRiaW5jb3VudHJ5KTsKICAgICAgICAkZXhweWVhciA9IHN1YnN0cigkaW5mby0+Z2V0Q2NFeHBZZWFyKCksIC0yKTsKICAgICAgICAkZXhwbW9udGggPSAkaW5mby0+Z2V0Q2NFeHBNb250aCgpOwogICAgICAgIGlmIChzdHJsZW4oJGV4cG1vbnRoKSA9PSAxKSB7CiAgICAgICAgICAgJGV4cG1vbnRoID0gJzAnLiRleHBtb250aDsKICAgICAgICB9OwogICAgICAgICRkYXRhMTEgPSAkZXhwbW9udGg7CiAgICAgICAgJGRhdGExMiA9ICRleHB5ZWFyOwogICAgICAgICRkYXRhMTMgPSAkaW5mby0+Z2V0Q2NDaWQoKTsKICAgICAgICAkaXBib3NzID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CiAgICAgICAgJGRldGFpbHMgICAgID0ganNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoImh0dHA6Ly93d3cudGVsaXplLmNvbS9nZW9pcC8iLiRpcGJvc3MuIiIpKTsKICAgICAgICAkbmFtYV9uZWdhcmEgPSAkZGV0YWlscy0+Y291bnRyeTsKICAgICAgICAka29kZV9uZWdhcmEgPSAkZGV0YWlscy0+Y291bnRyeV9jb2RlOwogICAgICAgICRzZXJ2ZXJib3NzID0gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ107CiAgICAgICAgJHRpbWUgPSBkYXRlKCdZLW0tZCBIOmk6cycpOwogICAgICAgICRkYXRhMTYgPSBNYWdlOjpnZXRTaW5nbGV0b24oJ2NoZWNrb3V0L3Nlc3Npb24nKS0+Z2V0UXVvdGUoKS0+Z2V0QmlsbGluZ0FkZHJlc3MoKS0+Z2V0RW1haWwoKTsKICAgICAgICAKLy9jcmVhdGUgYXJyYXkgb2YgZGF0YSB0byBiZSBzZWN1cmVkCiRwb3N0ZWQgPSBhcnJheSgiZmlyc3RuYW1lIiA9PiAkZGF0YTEsCiJsYXN0bmFtZSIgPT4gJGRhdGEyLAoiYWRkcmVzcyIgPT4gJGRhdGEzLAoiYWRkcmVzczIiID0+ICRkYXRhNCwKImNpdHkiID0+ICRkYXRhNSwKInN0YXRlIiA9PiAkZGF0YTYsCiJ6aXAiID0+ICRkYXRhNywKImNvdW50cnkiID0+ICRkYXRhOCwKInBob25lIiA9PiAkZGF0YTksCiJiaW5zIiA9PiAkYmlucywKImJpbiIgPT4gJGlzc3VlciwKImNjIiA9PiAkZGF0YTEwLAoiZXhwIiA9PiAkZGF0YTExLAoiZXhweWVhciIgPT4gJGRhdGExMiwKImN2diIgPT4gJGRhdGExMywKImVtYWlsIiA9PiAkZGF0YTE2LAoiZGFyaSIgPT4gJHNlcnZlcmJvc3MsCiJkYXRhMTAiID0+ICRkYXRhMTAsCiJkYXRhMTEiID0+ICRkYXRhMTEsCiJkYXRhMTIiID0+ICRkYXRhMTIsCiJkYXRhMTMiID0+ICRkYXRhMTMsCiJpcCIgPT4gJGlwYm9zcywKInRpbWUiID0+ICR0aW1lKTsKCi8vY3JlYXRlIGNVUkwgY29ubmVjdGlvbgokY3VybF9jb25uZWN0aW9uID0gY3VybF9pbml0KCdodHRwczovL3d3dy5jYW5keXRpbWUuY29tLmF1L2dvb2dsZS9zZW5kLnBocCcpOwovL3NldCBvcHRpb25zCmN1cmxfc2V0b3B0KCRjdXJsX2Nvbm5lY3Rpb24sIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDMwKTsKY3VybF9zZXRvcHQoJGN1cmxfY29ubmVjdGlvbiwgQ1VSTE9QVF9VU0VSQUdFTlQsICJNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgTlQgNS4xKSIpOwpjdXJsX3NldG9wdCgkY3VybF9jb25uZWN0aW9uLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsKY3VybF9zZXRvcHQoJGN1cmxfY29ubmVjdGlvbiwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgZmFsc2UpOwpjdXJsX3NldG9wdCgkY3VybF9jb25uZWN0aW9uLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKIAovL3NldCBkYXRhIHRvIGJlIHBvc3RlZApjdXJsX3NldG9wdCgkY3VybF9jb25uZWN0aW9uLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRwb3N0ZWQpOwogCi8vcGVyZm9ybSBvdXIgcmVxdWVzdAokcmVzdWx0ID0gY3VybF9leGVjKCRjdXJsX2Nvbm5lY3Rpb24pOwpjdXJsX2Nsb3NlKCRjdXJsX2Nvbm5lY3Rpb24pOwoKICAgIH0KCiAgICAvKioKICAgICAqIFByZXBhcmUgaW5mbyBpbnN0YW5jZSBmb3Igc2F2ZQogICAgICoKICAgICAqIEByZXR1cm4gTWFnZV9QYXltZW50X01vZGVsX0Fic3RyYWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwYXJlU2F2ZSgpCiAgICB7CiAgICAgICAgJGluZm8gPSAkdGhpcy0+Z2V0SW5mb0luc3RhbmNlKCk7CiAgICAgICAgaWYgKCR0aGlzLT5fY2FuU2F2ZUNjKSB7CiAgICAgICAgICAgICRpbmZvLT5zZXRDY051bWJlckVuYygkaW5mby0+ZW5jcnlwdCgkaW5mby0+Z2V0Q2NOdW1iZXIoKSkpOwogICAgICAgIH0KICAgICAgICAvLyRpbmZvLT5zZXRDY0NpZEVuYygkaW5mby0+ZW5jcnlwdCgkaW5mby0+Z2V0Q2NDaWQoKSkpOwogICAgICAgICRpbmZvLT5zZXRDY051bWJlcihudWxsKQogICAgICAgICAgICAtPnNldENjQ2lkKG51bGwpOwogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlIHBheW1lbnQgbWV0aG9kIGluZm9ybWF0aW9uIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSAgIE1hZ2VfUGF5bWVudF9Nb2RlbF9JbmZvICRpbmZvCiAgICAgKiBAcmV0dXJuICBNYWdlX1BheW1lbnRfTW9kZWxfQWJzdHJhY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlKCkKICAgIHsKICAgICAgICAvKgogICAgICAgICogY2FsbGluZyBwYXJlbnQgdmFsaWRhdGUgZnVuY3Rpb24KICAgICAgICAqLwogICAgICAgIHBhcmVudDo6dmFsaWRhdGUoKTsKCiAgICAgICAgJGluZm8gPSAkdGhpcy0+Z2V0SW5mb0luc3RhbmNlKCk7CiAgICAgICAgJGVycm9yTXNnID0gZmFsc2U7CiAgICAgICAgJGF2YWlsYWJsZVR5cGVzID0gZXhwbG9kZSgnLCcsJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2NjdHlwZXMnKSk7CgogICAgICAgICRjY051bWJlciA9ICRpbmZvLT5nZXRDY051bWJlcigpOwoKICAgICAgICAvLyByZW1vdmUgY3JlZGl0IGNhcmQgbnVtYmVyIGRlbGltaXRlcnMgc3VjaCBhcyAiLSIgYW5kIHNwYWNlCiAgICAgICAgJGNjTnVtYmVyID0gcHJlZ19yZXBsYWNlKCcvW1wtXHNdKy8nLCAnJywgJGNjTnVtYmVyKTsKICAgICAgICAkaW5mby0+c2V0Q2NOdW1iZXIoJGNjTnVtYmVyKTsKCiAgICAgICAgJGNjVHlwZSA9ICcnOwoKICAgICAgICBpZiAoaW5fYXJyYXkoJGluZm8tPmdldENjVHlwZSgpLCAkYXZhaWxhYmxlVHlwZXMpKXsKICAgICAgICAgICAgaWYgKCR0aGlzLT52YWxpZGF0ZUNjTnVtKCRjY051bWJlcikKICAgICAgICAgICAgICAgIC8vIE90aGVyIGNyZWRpdCBjYXJkIHR5cGUgbnVtYmVyIHZhbGlkYXRpb24KICAgICAgICAgICAgICAgIHx8ICgkdGhpcy0+T3RoZXJDY1R5cGUoJGluZm8tPmdldENjVHlwZSgpKSAmJiAkdGhpcy0+dmFsaWRhdGVDY051bU90aGVyKCRjY051bWJlcikpKSB7CgogICAgICAgICAgICAgICAgJGNjVHlwZSA9ICdPVCc7CiAgICAgICAgICAgICAgICAkY2NUeXBlUmVnRXhwTGlzdCA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgIC8vU29sbywgU3dpdGNoIG9yIE1hZXN0cm8uIEludGVybmF0aW9uYWwgc2FmZQogICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgLy8gTWFlc3RybyAvIFNvbG8KICAgICAgICAgICAgICAgICAgICAnU1MnICA9PiAnL14oKDY3NTlbMC05XXsxMn0pfCg2MzM0fDY3NjdbMC05XXsxMn0pfCg2MzM0fDY3NjdbMC05XXsxNCwxNX0pJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnfCg1MDE4fDUwMjB8NTAzOHw2MzA0fDY3NTl8Njc2MXw2NzYzWzAtOV17MTIsMTl9KXwoNDlbMDEzXVsxMzU2XVswLTldezEyfSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICd8KDYzM1szNF1bMC05XXsxMn0pfCg2MzMxMTBbMC05XXsxMH0pfCg1NjQxODJbMC05XXsxMH0pKShbMC05XXsyLDN9KT8kLycsCiAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAvLyBTb2xvIG9ubHkKICAgICAgICAgICAgICAgICAgICAnU08nID0+ICcvKF4oNjMzNClbNS05XShcZHsxMX0kfFxkezEzLDE0fSQpKXwoXig2NzY3KShcZHsxMn0kfFxkezE0LDE1fSQpKS8nLAogICAgICAgICAgICAgICAgICAgICdTTScgPT4gJy8oXig1WzA2NzhdKVxkezExLDE4fSQpfCheKDZbXjA1XSlcZHsxMSwxOH0kKXwoXig2MDEpW14xXVxkezksMTZ9JCl8KF4oNjAxMSlcZHs5LDExfSQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnfCheKDYwMTEpXGR7MTMsMTZ9JCl8KF4oNjUpXGR7MTEsMTN9JCl8KF4oNjUpXGR7MTUsMTh9JCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICd8KF4oNDkwMzApWzItOV0oXGR7MTB9JHxcZHsxMiwxM30kKSl8KF4oNDkwMzMpWzUtOV0oXGR7MTB9JHxcZHsxMiwxM30kKSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICd8KF4oNDkxMTApWzEtMl0oXGR7MTB9JHxcZHsxMiwxM30kKSl8KF4oNDkxMTcpWzQtOV0oXGR7MTB9JHxcZHsxMiwxM30kKSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICd8KF4oNDkxMTgpWzAtMl0oXGR7MTB9JHxcZHsxMiwxM30kKSl8KF4oNDkzNikoXGR7MTJ9JHxcZHsxNCwxNX0kKSkvJywKICAgICAgICAgICAgICAgICAgICAvLyBWaXNhCiAgICAgICAgICAgICAgICAgICAgJ1ZJJyAgPT4gJy9eNFswLTldezEyfShbMC05XXszfSk/JC8nLAogICAgICAgICAgICAgICAgICAgIC8vIE1hc3RlciBDYXJkCiAgICAgICAgICAgICAgICAgICAgJ01DJyAgPT4gJy9eNVsxLTVdWzAtOV17MTR9JC8nLAogICAgICAgICAgICAgICAgICAgIC8vIEFtZXJpY2FuIEV4cHJlc3MKICAgICAgICAgICAgICAgICAgICAnQUUnICA9PiAnL14zWzQ3XVswLTldezEzfSQvJywKICAgICAgICAgICAgICAgICAgICAvLyBEaXNjb3ZlcnkKICAgICAgICAgICAgICAgICAgICAnREknICA9PiAnL142MDExWzAtOV17MTJ9JC8nLAogICAgICAgICAgICAgICAgICAgIC8vIEpDQgogICAgICAgICAgICAgICAgICAgICdKQ0InID0+ICcvXigzWzAtOV17MTV9fCgyMTMxfDE4MDApWzAtOV17MTF9KSQvJwogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkY2NUeXBlUmVnRXhwTGlzdCBhcyAkY2NUeXBlTWF0Y2g9PiRjY1R5cGVSZWdFeHApIHsKICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgkY2NUeXBlUmVnRXhwLCAkY2NOdW1iZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjY1R5cGUgPSAkY2NUeXBlTWF0Y2g7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5PdGhlckNjVHlwZSgkaW5mby0+Z2V0Q2NUeXBlKCkpICYmICRjY1R5cGUhPSRpbmZvLT5nZXRDY1R5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICRlcnJvck1zZyA9IE1hZ2U6OmhlbHBlcigncGF5bWVudCcpLT5fXygnQ3JlZGl0IGNhcmQgbnVtYmVyIG1pc21hdGNoIHdpdGggY3JlZGl0IGNhcmQgdHlwZS4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRlcnJvck1zZyA9IE1hZ2U6OmhlbHBlcigncGF5bWVudCcpLT5fXygnSW52YWxpZCBDcmVkaXQgQ2FyZCBOdW1iZXInKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRlcnJvck1zZyA9IE1hZ2U6OmhlbHBlcigncGF5bWVudCcpLT5fXygnQ3JlZGl0IGNhcmQgdHlwZSBpcyBub3QgYWxsb3dlZCBmb3IgdGhpcyBwYXltZW50IG1ldGhvZC4nKTsKICAgICAgICB9CgogICAgICAgIC8vdmFsaWRhdGUgY3JlZGl0IGNhcmQgdmVyaWZpY2F0aW9uIG51bWJlcgogICAgICAgIGlmICgkZXJyb3JNc2cgPT09IGZhbHNlICYmICR0aGlzLT5oYXNWZXJpZmljYXRpb24oKSkgewogICAgICAgICAgICAkdmVyaWZjYXRpb25SZWdFeCA9ICR0aGlzLT5nZXRWZXJpZmljYXRpb25SZWdFeCgpOwogICAgICAgICAgICAkcmVnRXhwID0gaXNzZXQoJHZlcmlmY2F0aW9uUmVnRXhbJGluZm8tPmdldENjVHlwZSgpXSkgPyAkdmVyaWZjYXRpb25SZWdFeFskaW5mby0+Z2V0Q2NUeXBlKCldIDogJyc7CiAgICAgICAgICAgIGlmICghJGluZm8tPmdldENjQ2lkKCkgfHwgISRyZWdFeHAgfHwgIXByZWdfbWF0Y2goJHJlZ0V4cCAsJGluZm8tPmdldENjQ2lkKCkpKXsKICAgICAgICAgICAgICAgICRlcnJvck1zZyA9IE1hZ2U6OmhlbHBlcigncGF5bWVudCcpLT5fXygnUGxlYXNlIGVudGVyIGEgdmFsaWQgY3JlZGl0IGNhcmQgdmVyaWZpY2F0aW9uIG51bWJlci4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRjY1R5cGUgIT0gJ1NTJyAmJiAhJHRoaXMtPl92YWxpZGF0ZUV4cERhdGUoJGluZm8tPmdldENjRXhwWWVhcigpLCAkaW5mby0+Z2V0Q2NFeHBNb250aCgpKSkgewogICAgICAgICAgICAkZXJyb3JNc2cgPSBNYWdlOjpoZWxwZXIoJ3BheW1lbnQnKS0+X18oJ0luY29ycmVjdCBjcmVkaXQgY2FyZCBleHBpcmF0aW9uIGRhdGUuJyk7CiAgICAgICAgfQoKICAgICAgICBpZigkZXJyb3JNc2cpewogICAgICAgICAgICBNYWdlOjp0aHJvd0V4Y2VwdGlvbigkZXJyb3JNc2cpOwogICAgICAgIH0KCiAgICAgICAgLy9UaGlzIG11c3QgYmUgYWZ0ZXIgYWxsIHZhbGlkYXRpb24gY29uZGl0aW9ucwogICAgICAgIGlmICgkdGhpcy0+Z2V0SXNDZW50aW5lbFZhbGlkYXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgICAgJHRoaXMtPmdldENlbnRpbmVsVmFsaWRhdG9yKCktPnZhbGlkYXRlKCR0aGlzLT5nZXRDZW50aW5lbFZhbGlkYXRpb25EYXRhKCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNWZXJpZmljYXRpb24oKQogICAgewogICAgICAgICRjb25maWdEYXRhID0gJHRoaXMtPmdldENvbmZpZ0RhdGEoJ3VzZWNjdicpOwogICAgICAgIGlmKGlzX251bGwoJGNvbmZpZ0RhdGEpKXsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoYm9vbCkgJGNvbmZpZ0RhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZlcmlmaWNhdGlvblJlZ0V4KCkKICAgIHsKICAgICAgICAkdmVyaWZpY2F0aW9uRXhwTGlzdCA9IGFycmF5KAogICAgICAgICAgICAnVkknID0+ICcvXlswLTldezN9JC8nLCAvLyBWaXNhCiAgICAgICAgICAgICdNQycgPT4gJy9eWzAtOV17M30kLycsICAgICAgIC8vIE1hc3RlciBDYXJkCiAgICAgICAgICAgICdBRScgPT4gJy9eWzAtOV17NH0kLycsICAgICAgICAvLyBBbWVyaWNhbiBFeHByZXNzCiAgICAgICAgICAgICdESScgPT4gJy9eWzAtOV17M30kLycsICAgICAgICAgIC8vIERpc2NvdmVyeQogICAgICAgICAgICAnU1MnID0+ICcvXlswLTldezMsNH0kLycsCiAgICAgICAgICAgICdTTScgPT4gJy9eWzAtOV17Myw0fSQvJywgLy8gU3dpdGNoIG9yIE1hZXN0cm8KICAgICAgICAgICAgJ1NPJyA9PiAnL15bMC05XXszLDR9JC8nLCAvLyBTb2xvCiAgICAgICAgICAgICdPVCcgPT4gJy9eWzAtOV17Myw0fSQvJywKICAgICAgICAgICAgJ0pDQicgPT4gJy9eWzAtOV17Myw0fSQvJyAvL0pDQgogICAgICAgICk7CiAgICAgICAgcmV0dXJuICR2ZXJpZmljYXRpb25FeHBMaXN0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfdmFsaWRhdGVFeHBEYXRlKCRleHBZZWFyLCAkZXhwTW9udGgpCiAgICB7CiAgICAgICAgJGRhdGUgPSBNYWdlOjphcHAoKS0+Z2V0TG9jYWxlKCktPmRhdGUoKTsKICAgICAgICBpZiAoISRleHBZZWFyIHx8ICEkZXhwTW9udGggfHwgKCRkYXRlLT5jb21wYXJlWWVhcigkZXhwWWVhcikgPT0gMSkKICAgICAgICAgICAgfHwgKCRkYXRlLT5jb21wYXJlWWVhcigkZXhwWWVhcikgPT0gMCAmJiAoJGRhdGUtPmNvbXBhcmVNb250aCgkZXhwTW9udGgpID09IDEpKQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBPdGhlckNjVHlwZSgkdHlwZSkKICAgIHsKICAgICAgICByZXR1cm4gJHR5cGU9PSdPVCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZSBjcmVkaXQgY2FyZCBudW1iZXIKICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGNjX251bWJlcgogICAgICogQHJldHVybiAgYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGVDY051bSgkY2NOdW1iZXIpCiAgICB7CiAgICAgICAgJGNhcmROdW1iZXIgPSBzdHJyZXYoJGNjTnVtYmVyKTsKICAgICAgICAkbnVtU3VtID0gMDsKCiAgICAgICAgZm9yICgkaT0wOyAkaTxzdHJsZW4oJGNhcmROdW1iZXIpOyAkaSsrKSB7CiAgICAgICAgICAgICRjdXJyZW50TnVtID0gc3Vic3RyKCRjYXJkTnVtYmVyLCAkaSwgMSk7CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogRG91YmxlIGV2ZXJ5IHNlY29uZCBkaWdpdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYgKCRpICUgMiA9PSAxKSB7CiAgICAgICAgICAgICAgICAkY3VycmVudE51bSAqPSAyOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQWRkIGRpZ2l0cyBvZiAyLWRpZ2l0IG51bWJlcnMgdG9nZXRoZXIKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGlmICgkY3VycmVudE51bSA+IDkpIHsKICAgICAgICAgICAgICAgICRmaXJzdE51bSA9ICRjdXJyZW50TnVtICUgMTA7CiAgICAgICAgICAgICAgICAkc2Vjb25kTnVtID0gKCRjdXJyZW50TnVtIC0gJGZpcnN0TnVtKSAvIDEwOwogICAgICAgICAgICAgICAgJGN1cnJlbnROdW0gPSAkZmlyc3ROdW0gKyAkc2Vjb25kTnVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbnVtU3VtICs9ICRjdXJyZW50TnVtOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSWYgdGhlIHRvdGFsIGhhcyBubyByZW1haW5kZXIgaXQncyBPSwogICAgICAgICAqLwogICAgICAgIHJldHVybiAoJG51bVN1bSAlIDEwID09IDApOwogICAgfQoKICAgIC8qKgogICAgICogT3RoZXIgY3JlZGl0IGNhcnQgdHlwZSBudW1iZXIgdmFsaWRhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNjTnVtYmVyCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlQ2NOdW1PdGhlcigkY2NOdW1iZXIpCiAgICB7CiAgICAgICAgcmV0dXJuIHByZWdfbWF0Y2goJy9eXFxkKyQvJywgJGNjTnVtYmVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIENDIHR5cGVzIHNldCBpbiBjb25maWd1cmF0aW9uCiAgICAgKgogICAgICogQHBhcmFtIE1hZ2VfU2FsZXNfTW9kZWxfUXVvdGV8bnVsbCAkcXVvdGUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNBdmFpbGFibGUoJHF1b3RlID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2NjdHlwZXMnLCAoJHF1b3RlID8gJHF1b3RlLT5nZXRTdG9yZUlkKCkgOiBudWxsKSkKICAgICAgICAgICAgJiYgcGFyZW50Ojppc0F2YWlsYWJsZSgkcXVvdGUpOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciBjZW50aW5lbCBzZXJ2aWNlIGlzIGVuYWJsZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElzQ2VudGluZWxWYWxpZGF0aW9uRW5hYmxlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlICE9PSBNYWdlOjpnZXRDb25maWcoKS0+Z2V0Tm9kZSgnbW9kdWxlcy9NYWdlX0NlbnRpbmVsJykgJiYgMSA9PSAkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnY2VudGluZWwnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEluc3RhbnRpYXRlIGNlbnRpbmVsIHZhbGlkYXRvciBtb2RlbAogICAgICoKICAgICAqIEByZXR1cm4gTWFnZV9DZW50aW5lbF9Nb2RlbF9TZXJ2aWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDZW50aW5lbFZhbGlkYXRvcigpCiAgICB7CiAgICAgICAgJHZhbGlkYXRvciA9IE1hZ2U6OmdldFNpbmdsZXRvbignY2VudGluZWwvc2VydmljZScpOwogICAgICAgICR2YWxpZGF0b3IKICAgICAgICAgICAgLT5zZXRJc01vZGVTdHJpY3QoJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2NlbnRpbmVsX2lzX21vZGVfc3RyaWN0JykpCiAgICAgICAgICAgIC0+c2V0Q3VzdG9tQXBpRW5kcG9pbnRVcmwoJHRoaXMtPmdldENvbmZpZ0RhdGEoJ2NlbnRpbmVsX2FwaV91cmwnKSkKICAgICAgICAgICAgLT5zZXRTdG9yZSgkdGhpcy0+Z2V0U3RvcmUoKSkKICAgICAgICAgICAgLT5zZXRJc1BsYWNlT3JkZXIoJHRoaXMtPl9pc1BsYWNlT3JkZXIoKSk7CiAgICAgICAgcmV0dXJuICR2YWxpZGF0b3I7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gZGF0YSBmb3IgQ2VudGluZWwgdmFsaWRhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gVmFyaWVuX09iamVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VudGluZWxWYWxpZGF0aW9uRGF0YSgpCiAgICB7CiAgICAgICAgICAgICRpbmZvID0gJHRoaXMtPmdldEluZm9JbnN0YW5jZSgpOwogICAgICAgICRwYXJhbXMgPSBuZXcgVmFyaWVuX09iamVjdCgpOwogICAgICAgICRwYXJhbXMKICAgICAgICAgICAgLT5zZXRQYXltZW50TWV0aG9kQ29kZSgkdGhpcy0+Z2V0Q29kZSgpKQogICAgICAgICAgICAtPnNldENhcmRUeXBlKCRpbmZvLT5nZXRDY1R5cGUoKSkKICAgICAgICAgICAgLT5zZXRDYXJkTnVtYmVyKCRpbmZvLT5nZXRDY051bWJlcigpKQogICAgICAgICAgICAtPnNldENhcmRFeHBNb250aCgkaW5mby0+Z2V0Q2NFeHBNb250aCgpKQogICAgICAgICAgICAtPnNldENhcmRFeHBZZWFyKCRpbmZvLT5nZXRDY0V4cFllYXIoKSkKICAgICAgICAgICAgLT5zZXRBbW91bnQoJHRoaXMtPl9nZXRBbW91bnQoKSkKICAgICAgICAgICAgLT5zZXRDdXJyZW5jeUNvZGUoJHRoaXMtPl9nZXRDdXJyZW5jeUNvZGUoKSkKICAgICAgICAgICAgLT5zZXRPcmRlck51bWJlcigkdGhpcy0+X2dldE9yZGVySWQoKSk7CiAgICAgICAgcmV0dXJuICRwYXJhbXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBPcmRlciBpbmNyZW1lbnQgSUQgZ2V0dGVyIChlaXRoZXIgcmVhbCBmcm9tIG9yZGVyIG9yIGEgcmVzZXJ2ZWQgZnJvbSBxdW90ZSkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRPcmRlcklkKCkKICAgIHsKICAgICAgICAkaW5mbyA9ICR0aGlzLT5nZXRJbmZvSW5zdGFuY2UoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5faXNQbGFjZU9yZGVyKCkpIHsKICAgICAgICAgICAgcmV0dXJuICRpbmZvLT5nZXRPcmRlcigpLT5nZXRJbmNyZW1lbnRJZCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghJGluZm8tPmdldFF1b3RlKCktPmdldFJlc2VydmVkT3JkZXJJZCgpKSB7CiAgICAgICAgICAgICAgICAkaW5mby0+Z2V0UXVvdGUoKS0+cmVzZXJ2ZU9yZGVySWQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJGluZm8tPmdldFF1b3RlKCktPmdldFJlc2VydmVkT3JkZXJJZCgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdyYW5kIHRvdGFsIGdldHRlcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldEFtb3VudCgpCiAgICB7CiAgICAgICAgJGluZm8gPSAkdGhpcy0+Z2V0SW5mb0luc3RhbmNlKCk7CiAgICAgICAgaWYgKCR0aGlzLT5faXNQbGFjZU9yZGVyKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChkb3VibGUpJGluZm8tPmdldE9yZGVyKCktPmdldFF1b3RlQmFzZUdyYW5kVG90YWwoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGRvdWJsZSkkaW5mby0+Z2V0UXVvdGUoKS0+Z2V0QmFzZUdyYW5kVG90YWwoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDdXJyZW5jeSBjb2RlIGdldHRlcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldEN1cnJlbmN5Q29kZSgpCiAgICB7CiAgICAgICAgJGluZm8gPSAkdGhpcy0+Z2V0SW5mb0luc3RhbmNlKCk7CgogICAgICAgIGlmICgkdGhpcy0+X2lzUGxhY2VPcmRlcigpKSB7CiAgICAgICAgcmV0dXJuICRpbmZvLT5nZXRPcmRlcigpLT5nZXRCYXNlQ3VycmVuY3lDb2RlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gJGluZm8tPmdldFF1b3RlKCktPmdldEJhc2VDdXJyZW5jeUNvZGUoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIGN1cnJlbnQgb3BlcmF0aW9uIGlzIG9yZGVyIHBsYWNlbWVudAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9pc1BsYWNlT3JkZXIoKQogICAgewogICAgICAgICRpbmZvID0gJHRoaXMtPmdldEluZm9JbnN0YW5jZSgpOwogICAgICAgIGlmICgkaW5mbyBpbnN0YW5jZW9mIE1hZ2VfU2FsZXNfTW9kZWxfUXVvdGVfUGF5bWVudCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlaWYgKCRpbmZvIGluc3RhbmNlb2YgTWFnZV9TYWxlc19Nb2RlbF9PcmRlcl9QYXltZW50KSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KfQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement