| 1 | { |
| 2 | "file": "runner.js", |
| 3 | "names": [], |
| 4 | "sources": [ |
| 5 | "../src/runner.ts" |
| 6 | ], |
| 7 | "version": 3, |
| 8 | "mappings": "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", |
| 9 | "sourceRoot": "" |
| 10 | } |
| 1 | Y29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoInByb2Nlc3MiKTsgLy8gZW5zdXJlIHNoaW0KCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeSB2MS4wLjEKLy8KLy8gQ29weXJpZ2h0IChjKSAyMDEzIEphbWVzIEhhbGxpZGF5Ci8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLgovLwovLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQovLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi8vICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAovLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0Ci8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZQovLyBmb2xsb3dpbmcgY29uZGl0aW9uczoKLy8KLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi8vCi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTgovLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KCmZ1bmN0aW9uIGFzc2VydFBhdGgocGF0aCkgewogIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIEpTT04uc3RyaW5naWZ5KHBhdGgpKTsKICB9Cn0KCi8vIFJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCB3aXRoIGRpcmVjdG9yeSBuYW1lcwpmdW5jdGlvbiBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLCBhbGxvd0Fib3ZlUm9vdCkgewogIHZhciByZXMgPSAnJzsKICB2YXIgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogIHZhciBsYXN0U2xhc2ggPSAtMTsKICB2YXIgZG90cyA9IDA7CiAgdmFyIGNvZGU7CiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcGF0aC5sZW5ndGg7ICsraSkgewogICAgaWYgKGkgPCBwYXRoLmxlbmd0aCkKICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTsKICAgIGVsc2UgaWYgKGNvZGUgPT09IDQ3IC8qLyovKQogICAgICBicmVhazsKICAgIGVsc2UKICAgICAgY29kZSA9IDQ3IC8qLyovOwogICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7CiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGkgLSAxIHx8IGRvdHMgPT09IDEpIHsKICAgICAgICAvLyBOT09QCiAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpIC0gMSAmJiBkb3RzID09PSAyKSB7CiAgICAgICAgaWYgKHJlcy5sZW5ndGggPCAyIHx8IGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8IHJlcy5jaGFyQ29kZUF0KHJlcy5sZW5ndGggLSAxKSAhPT0gNDYgfHwgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDIpICE9PSA0NikgewogICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAyKSB7CiAgICAgICAgICAgIHZhciBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZignLycpOwogICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggIT09IHJlcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgcmVzID0gJyc7CiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5zbGljZSgwLCBsYXN0U2xhc2hJbmRleCk7CiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKCcvJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7CiAgICAgICAgICAgICAgZG90cyA9IDA7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA9PT0gMiB8fCByZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgIHJlcyA9ICcnOwogICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7CiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7CiAgICAgICAgICAgIGRvdHMgPSAwOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7CiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApCiAgICAgICAgICAgIHJlcyArPSAnLy4uJzsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmVzID0gJy4uJzsKICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKQogICAgICAgICAgcmVzICs9ICcvJyArIHBhdGguc2xpY2UobGFzdFNsYXNoICsgMSwgaSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTsKICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGkgLSBsYXN0U2xhc2ggLSAxOwogICAgICB9CiAgICAgIGxhc3RTbGFzaCA9IGk7CiAgICAgIGRvdHMgPSAwOwogICAgfSBlbHNlIGlmIChjb2RlID09PSA0NiAmJiBkb3RzICE9PSAtMSkgewogICAgICArK2RvdHM7CiAgICB9IGVsc2UgewogICAgICBkb3RzID0gLTE7CiAgICB9CiAgfQogIHJldHVybiByZXM7Cn0KCmZ1bmN0aW9uIF9mb3JtYXQoc2VwLCBwYXRoT2JqZWN0KSB7CiAgdmFyIGRpciA9IHBhdGhPYmplY3QuZGlyIHx8IHBhdGhPYmplY3Qucm9vdDsKICB2YXIgYmFzZSA9IHBhdGhPYmplY3QuYmFzZSB8fCAocGF0aE9iamVjdC5uYW1lIHx8ICcnKSArIChwYXRoT2JqZWN0LmV4dCB8fCAnJyk7CiAgaWYgKCFkaXIpIHsKICAgIHJldHVybiBiYXNlOwogIH0KICBpZiAoZGlyID09PSBwYXRoT2JqZWN0LnJvb3QpIHsKICAgIHJldHVybiBkaXIgKyBiYXNlOwogIH0KICByZXR1cm4gZGlyICsgc2VwICsgYmFzZTsKfQoKdmFyIHBvc2l4ID0gewogIC8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bykKICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKCkgewogICAgdmFyIHJlc29sdmVkUGF0aCA9ICcnOwogICAgdmFyIHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTsKICAgIHZhciBjd2Q7CgogICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHsKICAgICAgdmFyIHBhdGg7CiAgICAgIGlmIChpID49IDApCiAgICAgICAgcGF0aCA9IGFyZ3VtZW50c1tpXTsKICAgICAgZWxzZSB7CiAgICAgICAgaWYgKGN3ZCA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgY3dkID0gcHJvY2Vzcy5jd2QoKTsKICAgICAgICBwYXRoID0gY3dkOwogICAgICB9CgogICAgICBhc3NlcnRQYXRoKHBhdGgpOwoKICAgICAgLy8gU2tpcCBlbXB0eSBlbnRyaWVzCiAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICByZXNvbHZlZFBhdGggPSBwYXRoICsgJy8nICsgcmVzb2x2ZWRQYXRoOwogICAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLzsKICAgIH0KCiAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0CiAgICAvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgdG8gYmUgc2FmZSAobWlnaHQgaGFwcGVuIHdoZW4gcHJvY2Vzcy5jd2QoKSBmYWlscykKCiAgICAvLyBOb3JtYWxpemUgdGhlIHBhdGgKICAgIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZVN0cmluZ1Bvc2l4KHJlc29sdmVkUGF0aCwgIXJlc29sdmVkQWJzb2x1dGUpOwoKICAgIGlmIChyZXNvbHZlZEFic29sdXRlKSB7CiAgICAgIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID4gMCkKICAgICAgICByZXR1cm4gJy8nICsgcmVzb2x2ZWRQYXRoOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuICcvJzsKICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApIHsKICAgICAgcmV0dXJuIHJlc29sdmVkUGF0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAnLic7CiAgICB9CiAgfSwKCiAgbm9ybWFsaXplOiBmdW5jdGlvbiBub3JtYWxpemUocGF0aCkgewogICAgYXNzZXJ0UGF0aChwYXRoKTsKCiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiAnLic7CgogICAgdmFyIGlzQWJzb2x1dGUgPSBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IDQ3IC8qLyovOwogICAgdmFyIHRyYWlsaW5nU2VwYXJhdG9yID0gcGF0aC5jaGFyQ29kZUF0KHBhdGgubGVuZ3RoIC0gMSkgPT09IDQ3IC8qLyovOwoKICAgIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aAogICAgcGF0aCA9IG5vcm1hbGl6ZVN0cmluZ1Bvc2l4KHBhdGgsICFpc0Fic29sdXRlKTsKCiAgICBpZiAocGF0aC5sZW5ndGggPT09IDAgJiYgIWlzQWJzb2x1dGUpIHBhdGggPSAnLic7CiAgICBpZiAocGF0aC5sZW5ndGggPiAwICYmIHRyYWlsaW5nU2VwYXJhdG9yKSBwYXRoICs9ICcvJzsKCiAgICBpZiAoaXNBYnNvbHV0ZSkgcmV0dXJuICcvJyArIHBhdGg7CiAgICByZXR1cm4gcGF0aDsKICB9LAoKICBpc0Fic29sdXRlOiBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGgpIHsKICAgIGFzc2VydFBhdGgocGF0aCk7CiAgICByZXR1cm4gcGF0aC5sZW5ndGggPiAwICYmIHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87CiAgfSwKCiAgam9pbjogZnVuY3Rpb24gam9pbigpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gJy4nOwogICAgdmFyIGpvaW5lZDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07CiAgICAgIGFzc2VydFBhdGgoYXJnKTsKICAgICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7CiAgICAgICAgaWYgKGpvaW5lZCA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgam9pbmVkID0gYXJnOwogICAgICAgIGVsc2UKICAgICAgICAgIGpvaW5lZCArPSAnLycgKyBhcmc7CiAgICAgIH0KICAgIH0KICAgIGlmIChqb2luZWQgPT09IHVuZGVmaW5lZCkKICAgICAgcmV0dXJuICcuJzsKICAgIHJldHVybiBwb3NpeC5ub3JtYWxpemUoam9pbmVkKTsKICB9LAoKICByZWxhdGl2ZTogZnVuY3Rpb24gcmVsYXRpdmUoZnJvbSwgdG8pIHsKICAgIGFzc2VydFBhdGgoZnJvbSk7CiAgICBhc3NlcnRQYXRoKHRvKTsKCiAgICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiAnJzsKCiAgICBmcm9tID0gcG9zaXgucmVzb2x2ZShmcm9tKTsKICAgIHRvID0gcG9zaXgucmVzb2x2ZSh0byk7CgogICAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gJyc7CgogICAgaWYgKGZyb20gPT09ICIuIikgcmV0dXJuIHRvOyAvLyBGSVggZm9yICdvZHVsZS50cycgKHNlZSBpc3N1ZSAjMTM5OCkKCiAgICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzCiAgICB2YXIgZnJvbVN0YXJ0ID0gMTsKICAgIGZvciAoOyBmcm9tU3RhcnQgPCBmcm9tLmxlbmd0aDsgKytmcm9tU3RhcnQpIHsKICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQpICE9PSA0NyAvKi8qLykKICAgICAgICBicmVhazsKICAgIH0KICAgIHZhciBmcm9tRW5kID0gZnJvbS5sZW5ndGg7CiAgICB2YXIgZnJvbUxlbiA9IGZyb21FbmQgLSBmcm9tU3RhcnQ7CgogICAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlcwogICAgdmFyIHRvU3RhcnQgPSAxOwogICAgZm9yICg7IHRvU3RhcnQgPCB0by5sZW5ndGg7ICsrdG9TdGFydCkgewogICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gNDcgLyovKi8pCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICB2YXIgdG9FbmQgPSB0by5sZW5ndGg7CiAgICB2YXIgdG9MZW4gPSB0b0VuZCAtIHRvU3RhcnQ7CgogICAgLy8gQ29tcGFyZSBwYXRocyB0byBmaW5kIHRoZSBsb25nZXN0IGNvbW1vbiBwYXRoIGZyb20gcm9vdAogICAgdmFyIGxlbmd0aCA9IGZyb21MZW4gPCB0b0xlbiA/IGZyb21MZW4gOiB0b0xlbjsKICAgIHZhciBsYXN0Q29tbW9uU2VwID0gLTE7CiAgICB2YXIgaSA9IDA7CiAgICBmb3IgKDsgaSA8PSBsZW5ndGg7ICsraSkgewogICAgICBpZiAoaSA9PT0gbGVuZ3RoKSB7CiAgICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7CiAgICAgICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSkgPT09IDQ3IC8qLyovKSB7CiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgZXhhY3QgYmFzZSBwYXRoIGZvciBgdG9gLgogICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXInOyB0bz0nL2Zvby9iYXIvYmF6JwogICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkgKyAxKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkgewogICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIHJvb3QKICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy8nOyB0bz0nL2ZvbycKICAgICAgICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQgKyBpKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGZyb21MZW4gPiBsZW5ndGgpIHsKICAgICAgICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSkgPT09IDQ3IC8qLyovKSB7CiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLgogICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXIvYmF6JzsgdG89Jy9mb28vYmFyJwogICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTsKICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkgewogICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgdG9gIGlzIHRoZSByb290LgogICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvbyc7IHRvPScvJwogICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdmFyIGZyb21Db2RlID0gZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpOwogICAgICB2YXIgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7CiAgICAgIGlmIChmcm9tQ29kZSAhPT0gdG9Db2RlKQogICAgICAgIGJyZWFrOwogICAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gNDcgLyovKi8pCiAgICAgICAgbGFzdENvbW1vblNlcCA9IGk7CiAgICB9CgogICAgdmFyIG91dCA9ICcnOwogICAgLy8gR2VuZXJhdGUgdGhlIHJlbGF0aXZlIHBhdGggYmFzZWQgb24gdGhlIHBhdGggZGlmZmVyZW5jZSBiZXR3ZWVuIGB0b2AKICAgIC8vIGFuZCBgZnJvbWAKICAgIGZvciAoaSA9IGZyb21TdGFydCArIGxhc3RDb21tb25TZXAgKyAxOyBpIDw9IGZyb21FbmQ7ICsraSkgewogICAgICBpZiAoaSA9PT0gZnJvbUVuZCB8fCBmcm9tLmNoYXJDb2RlQXQoaSkgPT09IDQ3IC8qLyovKSB7CiAgICAgICAgaWYgKG91dC5sZW5ndGggPT09IDApCiAgICAgICAgICBvdXQgKz0gJy4uJzsKICAgICAgICBlbHNlCiAgICAgICAgICBvdXQgKz0gJy8uLic7CiAgICAgIH0KICAgIH0KCiAgICAvLyBMYXN0bHksIGFwcGVuZCB0aGUgcmVzdCBvZiB0aGUgZGVzdGluYXRpb24gKGB0b2ApIHBhdGggdGhhdCBjb21lcyBhZnRlcgogICAgLy8gdGhlIGNvbW1vbiBwYXRoIHBhcnRzCiAgICBpZiAob3V0Lmxlbmd0aCA+IDApCiAgICAgIHJldHVybiBvdXQgKyB0by5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCk7CiAgICBlbHNlIHsKICAgICAgdG9TdGFydCArPSBsYXN0Q29tbW9uU2VwOwogICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSA9PT0gNDcgLyovKi8pCiAgICAgICAgKyt0b1N0YXJ0OwogICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7CiAgICB9CiAgfSwKCiAgX21ha2VMb25nOiBmdW5jdGlvbiBfbWFrZUxvbmcocGF0aCkgewogICAgcmV0dXJuIHBhdGg7CiAgfSwKCiAgZGlybmFtZTogZnVuY3Rpb24gZGlybmFtZShwYXRoKSB7CiAgICBhc3NlcnRQYXRoKHBhdGgpOwogICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gJy4nOwogICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7CiAgICB2YXIgaGFzUm9vdCA9IGNvZGUgPT09IDQ3IC8qLyovOwogICAgdmFyIGVuZCA9IC0xOwogICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7CiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkgewogICAgICBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpOwogICAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHsKICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkgewogICAgICAgICAgZW5kID0gaTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvcgogICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICB9CiAgICB9CgogICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiBoYXNSb290ID8gJy8nIDogJy4nOwogICAgaWYgKGhhc1Jvb3QgJiYgZW5kID09PSAxKSByZXR1cm4gJy8vJzsKICAgIHJldHVybiBwYXRoLnNsaWNlKDAsIGVuZCk7CiAgfSwKCiAgYmFzZW5hbWU6IGZ1bmN0aW9uIGJhc2VuYW1lKHBhdGgsIGV4dCkgewogICAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBleHQgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICBhc3NlcnRQYXRoKHBhdGgpOwoKICAgIHZhciBzdGFydCA9IDA7CiAgICB2YXIgZW5kID0gLTE7CiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgIHZhciBpOwoKICAgIGlmIChleHQgIT09IHVuZGVmaW5lZCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGgubGVuZ3RoKSB7CiAgICAgIGlmIChleHQubGVuZ3RoID09PSBwYXRoLmxlbmd0aCAmJiBleHQgPT09IHBhdGgpIHJldHVybiAnJzsKICAgICAgdmFyIGV4dElkeCA9IGV4dC5sZW5ndGggLSAxOwogICAgICB2YXIgZmlyc3ROb25TbGFzaEVuZCA9IC0xOwogICAgICBmb3IgKGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7CiAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aAogICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93CiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkgewogICAgICAgICAgICBzdGFydCA9IGkgKyAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGZpcnN0Tm9uU2xhc2hFbmQgPT09IC0xKSB7CiAgICAgICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCByZW1lbWJlciB0aGlzIGluZGV4IGluIGNhc2UKICAgICAgICAgICAgLy8gd2UgbmVlZCBpdCBpZiB0aGUgZXh0ZW5zaW9uIGVuZHMgdXAgbm90IG1hdGNoaW5nCiAgICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaSArIDE7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXh0SWR4ID49IDApIHsKICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIHRoZSBleHBsaWNpdCBleHRlbnNpb24KICAgICAgICAgICAgaWYgKGNvZGUgPT09IGV4dC5jaGFyQ29kZUF0KGV4dElkeCkpIHsKICAgICAgICAgICAgICBpZiAoLS1leHRJZHggPT09IC0xKSB7CiAgICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBleHRlbnNpb24sIHNvIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91ciBwYXRoCiAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQKICAgICAgICAgICAgICAgIGVuZCA9IGk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIEV4dGVuc2lvbiBkb2VzIG5vdCBtYXRjaCwgc28gb3VyIHJlc3VsdCBpcyB0aGUgZW50aXJlIHBhdGgKICAgICAgICAgICAgICAvLyBjb21wb25lbnQKICAgICAgICAgICAgICBleHRJZHggPSAtMTsKICAgICAgICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoc3RhcnQgPT09IGVuZCkgZW5kID0gZmlyc3ROb25TbGFzaEVuZDtlbHNlIGlmIChlbmQgPT09IC0xKSBlbmQgPSBwYXRoLmxlbmd0aDsKICAgICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgaWYgKHBhdGguY2hhckNvZGVBdChpKSA9PT0gNDcgLyovKi8pIHsKICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoCiAgICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3cKICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7CiAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZW5kID09PSAtMSkgewogICAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91cgogICAgICAgICAgLy8gcGF0aCBjb21wb25lbnQKICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICAgICAgZW5kID0gaSArIDE7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoZW5kID09PSAtMSkgcmV0dXJuICcnOwogICAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTsKICAgIH0KICB9LAoKICBleHRuYW1lOiBmdW5jdGlvbiBleHRuYW1lKHBhdGgpIHsKICAgIGFzc2VydFBhdGgocGF0aCk7CiAgICB2YXIgc3RhcnREb3QgPSAtMTsKICAgIHZhciBzdGFydFBhcnQgPSAwOwogICAgdmFyIGVuZCA9IC0xOwogICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7CiAgICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kCiAgICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZAogICAgdmFyIHByZURvdFN0YXRlID0gMDsKICAgIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgIHZhciBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpOwogICAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHsKICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aAogICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vdwogICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7CiAgICAgICAgICBzdGFydFBhcnQgPSBpICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoZW5kID09PSAtMSkgewogICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXIKICAgICAgICAvLyBleHRlbnNpb24KICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTsKICAgICAgICBlbmQgPSBpICsgMTsKICAgICAgfQogICAgICBpZiAoY29kZSA9PT0gNDYpIHsKICAgICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb24KICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKQogICAgICAgICAgc3RhcnREb3QgPSBpOwogICAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKQogICAgICAgICAgcHJlRG90U3RhdGUgPSAxOwogICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkgewogICAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkCiAgICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb24KICAgICAgICBwcmVEb3RTdGF0ZSA9IC0xOwogICAgICB9CiAgICB9CgogICAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8CiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3QKICAgICAgICBwcmVEb3RTdGF0ZSA9PT0gMCB8fAogICAgICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLicKICAgICAgICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkgewogICAgICByZXR1cm4gJyc7CiAgICB9CiAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTsKICB9LAoKICBmb3JtYXQ6IGZ1bmN0aW9uIGZvcm1hdChwYXRoT2JqZWN0KSB7CiAgICBpZiAocGF0aE9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF0aE9iamVjdCAhPT0gJ29iamVjdCcpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgcGF0aE9iamVjdCk7CiAgICB9CiAgICByZXR1cm4gX2Zvcm1hdCgnLycsIHBhdGhPYmplY3QpOwogIH0sCgogIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShwYXRoKSB7CiAgICBhc3NlcnRQYXRoKHBhdGgpOwoKICAgIHZhciByZXQgPSB7IHJvb3Q6ICcnLCBkaXI6ICcnLCBiYXNlOiAnJywgZXh0OiAnJywgbmFtZTogJycgfTsKICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDsKICAgIHZhciBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApOwogICAgdmFyIGlzQWJzb2x1dGUgPSBjb2RlID09PSA0NyAvKi8qLzsKICAgIHZhciBzdGFydDsKICAgIGlmIChpc0Fic29sdXRlKSB7CiAgICAgIHJldC5yb290ID0gJy8nOwogICAgICBzdGFydCA9IDE7CiAgICB9IGVsc2UgewogICAgICBzdGFydCA9IDA7CiAgICB9CiAgICB2YXIgc3RhcnREb3QgPSAtMTsKICAgIHZhciBzdGFydFBhcnQgPSAwOwogICAgdmFyIGVuZCA9IC0xOwogICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7CiAgICB2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsKCiAgICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kCiAgICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZAogICAgdmFyIHByZURvdFN0YXRlID0gMDsKCiAgICAvLyBHZXQgbm9uLWRpciBpbmZvCiAgICBmb3IgKDsgaSA+PSBzdGFydDsgLS1pKSB7CiAgICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7CiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykgewogICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoCiAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93CiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChlbmQgPT09IC0xKSB7CiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91cgogICAgICAgIC8vIGV4dGVuc2lvbgogICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICAgIGVuZCA9IGkgKyAxOwogICAgICB9CiAgICAgIGlmIChjb2RlID09PSA0NikgewogICAgICAgIC8vIElmIHRoaXMgaXMgb3VyIGZpcnN0IGRvdCwgbWFyayBpdCBhcyB0aGUgc3RhcnQgb2Ygb3VyIGV4dGVuc2lvbgogICAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpIHN0YXJ0RG90ID0gaTtlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxOwogICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkgewogICAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkCiAgICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb24KICAgICAgICBwcmVEb3RTdGF0ZSA9IC0xOwogICAgICB9CiAgICB9CgogICAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8CiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdAogICAgcHJlRG90U3RhdGUgPT09IDAgfHwKICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLicKICAgIHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKSB7CiAgICAgIGlmIChlbmQgIT09IC0xKSB7CiAgICAgICAgaWYgKHN0YXJ0UGFydCA9PT0gMCAmJiBpc0Fic29sdXRlKSByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZSgxLCBlbmQpO2Vsc2UgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGUpIHsKICAgICAgICByZXQubmFtZSA9IHBhdGguc2xpY2UoMSwgc3RhcnREb3QpOwogICAgICAgIHJldC5iYXNlID0gcGF0aC5zbGljZSgxLCBlbmQpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTsKICAgICAgICByZXQuYmFzZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpOwogICAgICB9CiAgICAgIHJldC5leHQgPSBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpOwogICAgfQoKICAgIGlmIChzdGFydFBhcnQgPiAwKSByZXQuZGlyID0gcGF0aC5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTtlbHNlIGlmIChpc0Fic29sdXRlKSByZXQuZGlyID0gJy8nOwoKICAgIHJldHVybiByZXQ7CiAgfSwKCiAgc2VwOiAnLycsCiAgZGVsaW1pdGVyOiAnOicsCiAgd2luMzI6IG51bGwsCiAgcG9zaXg6IG51bGwKfTsKCnBvc2l4LnBvc2l4ID0gcG9zaXg7Cgptb2R1bGUuZXhwb3J0cyA9IHBvc2l4Owo= |
| 1 | InVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmlzSWRlbnRpZmllckNoYXIgPSBpc0lkZW50aWZpZXJDaGFyOwpleHBvcnRzLmlzSWRlbnRpZmllck5hbWUgPSBpc0lkZW50aWZpZXJOYW1lOwpleHBvcnRzLmlzSWRlbnRpZmllclN0YXJ0ID0gaXNJZGVudGlmaWVyU3RhcnQ7CmxldCBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzID0gIlx4YWFceGI1XHhiYVx4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHUwMmMxXHUwMmM2LVx1MDJkMVx1MDJlMC1cdTAyZTRcdTAyZWNcdTAyZWVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdhLVx1MDM3ZFx1MDM3Zlx1MDM4Nlx1MDM4OC1cdTAzOGFcdTAzOGNcdTAzOGUtXHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNmNy1cdTA0ODFcdTA0OGEtXHUwNTJmXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MC1cdTA1ODhcdTA1ZDAtXHUwNWVhXHUwNWVmLVx1MDVmMlx1MDYyMC1cdTA2NGFcdTA2NmVcdTA2NmZcdTA2NzEtXHUwNmQzXHUwNmQ1XHUwNmU1XHUwNmU2XHUwNmVlXHUwNmVmXHUwNmZhLVx1MDZmY1x1MDZmZlx1MDcxMFx1MDcxMi1cdTA3MmZcdTA3NGQtXHUwN2E1XHUwN2IxXHUwN2NhLVx1MDdlYVx1MDdmNFx1MDdmNVx1MDdmYVx1MDgwMC1cdTA4MTVcdTA4MWFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwODYwLVx1MDg2YVx1MDg3MC1cdTA4ODdcdTA4ODktXHUwODhmXHUwOGEwLVx1MDhjOVx1MDkwNC1cdTA5MzlcdTA5M2RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OGNcdTA5OGZcdTA5OTBcdTA5OTMtXHUwOWE4XHUwOWFhLVx1MDliMFx1MDliMlx1MDliNi1cdTA5YjlcdTA5YmRcdTA5Y2VcdTA5ZGNcdTA5ZGRcdTA5ZGYtXHUwOWUxXHUwOWYwXHUwOWYxXHUwOWZjXHUwYTA1LVx1MGEwYVx1MGEwZlx1MGExMFx1MGExMy1cdTBhMjhcdTBhMmEtXHUwYTMwXHUwYTMyXHUwYTMzXHUwYTM1XHUwYTM2XHUwYTM4XHUwYTM5XHUwYTU5LVx1MGE1Y1x1MGE1ZVx1MGE3Mi1cdTBhNzRcdTBhODUtXHUwYThkXHUwYThmLVx1MGE5MVx1MGE5My1cdTBhYThcdTBhYWEtXHUwYWIwXHUwYWIyXHUwYWIzXHUwYWI1LVx1MGFiOVx1MGFiZFx1MGFkMFx1MGFlMFx1MGFlMVx1MGFmOVx1MGIwNS1cdTBiMGNcdTBiMGZcdTBiMTBcdTBiMTMtXHUwYjI4XHUwYjJhLVx1MGIzMFx1MGIzMlx1MGIzM1x1MGIzNS1cdTBiMzlcdTBiM2RcdTBiNWNcdTBiNWRcdTBiNWYtXHUwYjYxXHUwYjcxXHUwYjgzXHUwYjg1LVx1MGI4YVx1MGI4ZS1cdTBiOTBcdTBiOTItXHUwYjk1XHUwYjk5XHUwYjlhXHUwYjljXHUwYjllXHUwYjlmXHUwYmEzXHUwYmE0XHUwYmE4LVx1MGJhYVx1MGJhZS1cdTBiYjlcdTBiZDBcdTBjMDUtXHUwYzBjXHUwYzBlLVx1MGMxMFx1MGMxMi1cdTBjMjhcdTBjMmEtXHUwYzM5XHUwYzNkXHUwYzU4LVx1MGM1YVx1MGM1Y1x1MGM1ZFx1MGM2MFx1MGM2MVx1MGM4MFx1MGM4NS1cdTBjOGNcdTBjOGUtXHUwYzkwXHUwYzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNcdTBjYjUtXHUwY2I5XHUwY2JkXHUwY2RjLVx1MGNkZVx1MGNlMFx1MGNlMVx1MGNmMVx1MGNmMlx1MGQwNC1cdTBkMGNcdTBkMGUtXHUwZDEwXHUwZDEyLVx1MGQzYVx1MGQzZFx1MGQ0ZVx1MGQ1NC1cdTBkNTZcdTBkNWYtXHUwZDYxXHUwZDdhLVx1MGQ3Zlx1MGQ4NS1cdTBkOTZcdTBkOWEtXHUwZGIxXHUwZGIzLVx1MGRiYlx1MGRiZFx1MGRjMC1cdTBkYzZcdTBlMDEtXHUwZTMwXHUwZTMyXHUwZTMzXHUwZTQwLVx1MGU0Nlx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4Ni1cdTBlOGFcdTBlOGMtXHUwZWEzXHUwZWE1XHUwZWE3LVx1MGViMFx1MGViMlx1MGViM1x1MGViZFx1MGVjMC1cdTBlYzRcdTBlYzZcdTBlZGMtXHUwZWRmXHUwZjAwXHUwZjQwLVx1MGY0N1x1MGY0OS1cdTBmNmNcdTBmODgtXHUwZjhjXHUxMDAwLVx1MTAyYVx1MTAzZlx1MTA1MC1cdTEwNTVcdTEwNWEtXHUxMDVkXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZlLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOGVcdTEwYTAtXHUxMGM1XHUxMGM3XHUxMGNkXHUxMGQwLVx1MTBmYVx1MTBmYy1cdTEyNDhcdTEyNGEtXHUxMjRkXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1YS1cdTEyNWRcdTEyNjAtXHUxMjg4XHUxMjhhLVx1MTI4ZFx1MTI5MC1cdTEyYjBcdTEyYjItXHUxMmI1XHUxMmI4LVx1MTJiZVx1MTJjMFx1MTJjMi1cdTEyYzVcdTEyYzgtXHUxMmQ2XHUxMmQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVhXHUxMzgwLVx1MTM4Zlx1MTNhMC1cdTEzZjVcdTEzZjgtXHUxM2ZkXHUxNDAxLVx1MTY2Y1x1MTY2Zi1cdTE2N2ZcdTE2ODEtXHUxNjlhXHUxNmEwLVx1MTZlYVx1MTZlZS1cdTE2ZjhcdTE3MDAtXHUxNzExXHUxNzFmLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZjXHUxNzZlLVx1MTc3MFx1MTc4MC1cdTE3YjNcdTE3ZDdcdTE3ZGNcdTE4MjAtXHUxODc4XHUxODgwLVx1MThhOFx1MThhYVx1MThiMC1cdTE4ZjVcdTE5MDAtXHUxOTFlXHUxOTUwLVx1MTk2ZFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOWFiXHUxOWIwLVx1MTljOVx1MWEwMC1cdTFhMTZcdTFhMjAtXHUxYTU0XHUxYWE3XHUxYjA1LVx1MWIzM1x1MWI0NS1cdTFiNGNcdTFiODMtXHUxYmEwXHUxYmFlXHUxYmFmXHUxYmJhLVx1MWJlNVx1MWMwMC1cdTFjMjNcdTFjNGQtXHUxYzRmXHUxYzVhLVx1MWM3ZFx1MWM4MC1cdTFjOGFcdTFjOTAtXHUxY2JhXHUxY2JkLVx1MWNiZlx1MWNlOS1cdTFjZWNcdTFjZWUtXHUxY2YzXHUxY2Y1XHUxY2Y2XHUxY2ZhXHUxZDAwLVx1MWRiZlx1MWUwMC1cdTFmMTVcdTFmMTgtXHUxZjFkXHUxZjIwLVx1MWY0NVx1MWY0OC1cdTFmNGRcdTFmNTAtXHUxZjU3XHUxZjU5XHUxZjViXHUxZjVkXHUxZjVmLVx1MWY3ZFx1MWY4MC1cdTFmYjRcdTFmYjYtXHUxZmJjXHUxZmJlXHUxZmMyLVx1MWZjNFx1MWZjNi1cdTFmY2NcdTFmZDAtXHUxZmQzXHUxZmQ2LVx1MWZkYlx1MWZlMC1cdTFmZWNcdTFmZjItXHUxZmY0XHUxZmY2LVx1MWZmY1x1MjA3MVx1MjA3Zlx1MjA5MC1cdTIwOWNcdTIxMDJcdTIxMDdcdTIxMGEtXHUyMTEzXHUyMTE1XHUyMTE4LVx1MjExZFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyYS1cdTIxMzlcdTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAtXHUyY2U0XHUyY2ViLVx1MmNlZVx1MmNmMlx1MmNmM1x1MmQwMC1cdTJkMjVcdTJkMjdcdTJkMmRcdTJkMzAtXHUyZDY3XHUyZDZmXHUyZDgwLVx1MmQ5Nlx1MmRhMC1cdTJkYTZcdTJkYTgtXHUyZGFlXHUyZGIwLVx1MmRiNlx1MmRiOC1cdTJkYmVcdTJkYzAtXHUyZGM2XHUyZGM4LVx1MmRjZVx1MmRkMC1cdTJkZDZcdTJkZDgtXHUyZGRlXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzY1x1MzA0MS1cdTMwOTZcdTMwOWItXHUzMDlmXHUzMGExLVx1MzBmYVx1MzBmYy1cdTMwZmZcdTMxMDUtXHUzMTJmXHUzMTMxLVx1MzE4ZVx1MzFhMC1cdTMxYmZcdTMxZjAtXHUzMWZmXHUzNDAwLVx1NGRiZlx1NGUwMC1cdWE0OGNcdWE0ZDAtXHVhNGZkXHVhNTAwLVx1YTYwY1x1YTYxMC1cdWE2MWZcdWE2MmFcdWE2MmJcdWE2NDAtXHVhNjZlXHVhNjdmLVx1YTY5ZFx1YTZhMC1cdWE2ZWZcdWE3MTctXHVhNzFmXHVhNzIyLVx1YTc4OFx1YTc4Yi1cdWE3ZGNcdWE3ZjEtXHVhODAxXHVhODAzLVx1YTgwNVx1YTgwNy1cdWE4MGFcdWE4MGMtXHVhODIyXHVhODQwLVx1YTg3M1x1YTg4Mi1cdWE4YjNcdWE4ZjItXHVhOGY3XHVhOGZiXHVhOGZkXHVhOGZlXHVhOTBhLVx1YTkyNVx1YTkzMC1cdWE5NDZcdWE5NjAtXHVhOTdjXHVhOTg0LVx1YTliMlx1YTljZlx1YTllMC1cdWE5ZTRcdWE5ZTYtXHVhOWVmXHVhOWZhLVx1YTlmZVx1YWEwMC1cdWFhMjhcdWFhNDAtXHVhYTQyXHVhYTQ0LVx1YWE0Ylx1YWE2MC1cdWFhNzZcdWFhN2FcdWFhN2UtXHVhYWFmXHVhYWIxXHVhYWI1XHVhYWI2XHVhYWI5LVx1YWFiZFx1YWFjMFx1YWFjMlx1YWFkYi1cdWFhZGRcdWFhZTAtXHVhYWVhXHVhYWYyLVx1YWFmNFx1YWIwMS1cdWFiMDZcdWFiMDktXHVhYjBlXHVhYjExLVx1YWIxNlx1YWIyMC1cdWFiMjZcdWFiMjgtXHVhYjJlXHVhYjMwLVx1YWI1YVx1YWI1Yy1cdWFiNjlcdWFiNzAtXHVhYmUyXHVhYzAwLVx1ZDdhM1x1ZDdiMC1cdWQ3YzZcdWQ3Y2ItXHVkN2ZiXHVmOTAwLVx1ZmE2ZFx1ZmE3MC1cdWZhZDlcdWZiMDAtXHVmYjA2XHVmYjEzLVx1ZmIxN1x1ZmIxZFx1ZmIxZi1cdWZiMjhcdWZiMmEtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0MFx1ZmI0MVx1ZmI0M1x1ZmI0NFx1ZmI0Ni1cdWZiYjFcdWZiZDMtXHVmZDNkXHVmZDUwLVx1ZmQ4Zlx1ZmQ5Mi1cdWZkYzdcdWZkZjAtXHVmZGZiXHVmZTcwLVx1ZmU3NFx1ZmU3Ni1cdWZlZmNcdWZmMjEtXHVmZjNhXHVmZjQxLVx1ZmY1YVx1ZmY2Ni1cdWZmYmVcdWZmYzItXHVmZmM3XHVmZmNhLVx1ZmZjZlx1ZmZkMi1cdWZmZDdcdWZmZGEtXHVmZmRjIjsKbGV0IG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzID0gIlx4YjdcdTAzMDAtXHUwMzZmXHUwMzg3XHUwNDgzLVx1MDQ4N1x1MDU5MS1cdTA1YmRcdTA1YmZcdTA1YzFcdTA1YzJcdTA1YzRcdTA1YzVcdTA1YzdcdTA2MTAtXHUwNjFhXHUwNjRiLVx1MDY2OVx1MDY3MFx1MDZkNi1cdTA2ZGNcdTA2ZGYtXHUwNmU0XHUwNmU3XHUwNmU4XHUwNmVhLVx1MDZlZFx1MDZmMC1cdTA2ZjlcdTA3MTFcdTA3MzAtXHUwNzRhXHUwN2E2LVx1MDdiMFx1MDdjMC1cdTA3YzlcdTA3ZWItXHUwN2YzXHUwN2ZkXHUwODE2LVx1MDgxOVx1MDgxYi1cdTA4MjNcdTA4MjUtXHUwODI3XHUwODI5LVx1MDgyZFx1MDg1OS1cdTA4NWJcdTA4OTctXHUwODlmXHUwOGNhLVx1MDhlMVx1MDhlMy1cdTA5MDNcdTA5M2EtXHUwOTNjXHUwOTNlLVx1MDk0Zlx1MDk1MS1cdTA5NTdcdTA5NjJcdTA5NjNcdTA5NjYtXHUwOTZmXHUwOTgxLVx1MDk4M1x1MDliY1x1MDliZS1cdTA5YzRcdTA5YzdcdTA5YzhcdTA5Y2ItXHUwOWNkXHUwOWQ3XHUwOWUyXHUwOWUzXHUwOWU2LVx1MDllZlx1MDlmZVx1MGEwMS1cdTBhMDNcdTBhM2NcdTBhM2UtXHUwYTQyXHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1MGE2Ni1cdTBhNzFcdTBhNzVcdTBhODEtXHUwYTgzXHUwYWJjXHUwYWJlLVx1MGFjNVx1MGFjNy1cdTBhYzlcdTBhY2ItXHUwYWNkXHUwYWUyXHUwYWUzXHUwYWU2LVx1MGFlZlx1MGFmYS1cdTBhZmZcdTBiMDEtXHUwYjAzXHUwYjNjXHUwYjNlLVx1MGI0NFx1MGI0N1x1MGI0OFx1MGI0Yi1cdTBiNGRcdTBiNTUtXHUwYjU3XHUwYjYyXHUwYjYzXHUwYjY2LVx1MGI2Zlx1MGI4Mlx1MGJiZS1cdTBiYzJcdTBiYzYtXHUwYmM4XHUwYmNhLVx1MGJjZFx1MGJkN1x1MGJlNi1cdTBiZWZcdTBjMDAtXHUwYzA0XHUwYzNjXHUwYzNlLVx1MGM0NFx1MGM0Ni1cdTBjNDhcdTBjNGEtXHUwYzRkXHUwYzU1XHUwYzU2XHUwYzYyXHUwYzYzXHUwYzY2LVx1MGM2Zlx1MGM4MS1cdTBjODNcdTBjYmNcdTBjYmUtXHUwY2M0XHUwY2M2LVx1MGNjOFx1MGNjYS1cdTBjY2RcdTBjZDVcdTBjZDZcdTBjZTJcdTBjZTNcdTBjZTYtXHUwY2VmXHUwY2YzXHUwZDAwLVx1MGQwM1x1MGQzYlx1MGQzY1x1MGQzZS1cdTBkNDRcdTBkNDYtXHUwZDQ4XHUwZDRhLVx1MGQ0ZFx1MGQ1N1x1MGQ2Mlx1MGQ2M1x1MGQ2Ni1cdTBkNmZcdTBkODEtXHUwZDgzXHUwZGNhXHUwZGNmLVx1MGRkNFx1MGRkNlx1MGRkOC1cdTBkZGZcdTBkZTYtXHUwZGVmXHUwZGYyXHUwZGYzXHUwZTMxXHUwZTM0LVx1MGUzYVx1MGU0Ny1cdTBlNGVcdTBlNTAtXHUwZTU5XHUwZWIxXHUwZWI0LVx1MGViY1x1MGVjOC1cdTBlY2VcdTBlZDAtXHUwZWQ5XHUwZjE4XHUwZjE5XHUwZjIwLVx1MGYyOVx1MGYzNVx1MGYzN1x1MGYzOVx1MGYzZVx1MGYzZlx1MGY3MS1cdTBmODRcdTBmODZcdTBmODdcdTBmOGQtXHUwZjk3XHUwZjk5LVx1MGZiY1x1MGZjNlx1MTAyYi1cdTEwM2VcdTEwNDAtXHUxMDQ5XHUxMDU2LVx1MTA1OVx1MTA1ZS1cdTEwNjBcdTEwNjItXHUxMDY0XHUxMDY3LVx1MTA2ZFx1MTA3MS1cdTEwNzRcdTEwODItXHUxMDhkXHUxMDhmLVx1MTA5ZFx1MTM1ZC1cdTEzNWZcdTEzNjktXHUxMzcxXHUxNzEyLVx1MTcxNVx1MTczMi1cdTE3MzRcdTE3NTJcdTE3NTNcdTE3NzJcdTE3NzNcdTE3YjQtXHUxN2QzXHUxN2RkXHUxN2UwLVx1MTdlOVx1MTgwYi1cdTE4MGRcdTE4MGYtXHUxODE5XHUxOGE5XHUxOTIwLVx1MTkyYlx1MTkzMC1cdTE5M2JcdTE5NDYtXHUxOTRmXHUxOWQwLVx1MTlkYVx1MWExNy1cdTFhMWJcdTFhNTUtXHUxYTVlXHUxYTYwLVx1MWE3Y1x1MWE3Zi1cdTFhODlcdTFhOTAtXHUxYTk5XHUxYWIwLVx1MWFiZFx1MWFiZi1cdTFhZGRcdTFhZTAtXHUxYWViXHUxYjAwLVx1MWIwNFx1MWIzNC1cdTFiNDRcdTFiNTAtXHUxYjU5XHUxYjZiLVx1MWI3M1x1MWI4MC1cdTFiODJcdTFiYTEtXHUxYmFkXHUxYmIwLVx1MWJiOVx1MWJlNi1cdTFiZjNcdTFjMjQtXHUxYzM3XHUxYzQwLVx1MWM0OVx1MWM1MC1cdTFjNTlcdTFjZDAtXHUxY2QyXHUxY2Q0LVx1MWNlOFx1MWNlZFx1MWNmNFx1MWNmNy1cdTFjZjlcdTFkYzAtXHUxZGZmXHUyMDBjXHUyMDBkXHUyMDNmXHUyMDQwXHUyMDU0XHUyMGQwLVx1MjBkY1x1MjBlMVx1MjBlNS1cdTIwZjBcdTJjZWYtXHUyY2YxXHUyZDdmXHUyZGUwLVx1MmRmZlx1MzAyYS1cdTMwMmZcdTMwOTlcdTMwOWFcdTMwZmJcdWE2MjAtXHVhNjI5XHVhNjZmXHVhNjc0LVx1YTY3ZFx1YTY5ZVx1YTY5Zlx1YTZmMFx1YTZmMVx1YTgwMlx1YTgwNlx1YTgwYlx1YTgyMy1cdWE4MjdcdWE4MmNcdWE4ODBcdWE4ODFcdWE4YjQtXHVhOGM1XHVhOGQwLVx1YThkOVx1YThlMC1cdWE4ZjFcdWE4ZmYtXHVhOTA5XHVhOTI2LVx1YTkyZFx1YTk0Ny1cdWE5NTNcdWE5ODAtXHVhOTgzXHVhOWIzLVx1YTljMFx1YTlkMC1cdWE5ZDlcdWE5ZTVcdWE5ZjAtXHVhOWY5XHVhYTI5LVx1YWEzNlx1YWE0M1x1YWE0Y1x1YWE0ZFx1YWE1MC1cdWFhNTlcdWFhN2ItXHVhYTdkXHVhYWIwXHVhYWIyLVx1YWFiNFx1YWFiN1x1YWFiOFx1YWFiZVx1YWFiZlx1YWFjMVx1YWFlYi1cdWFhZWZcdWFhZjVcdWFhZjZcdWFiZTMtXHVhYmVhXHVhYmVjXHVhYmVkXHVhYmYwLVx1YWJmOVx1ZmIxZVx1ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTJmXHVmZTMzXHVmZTM0XHVmZTRkLVx1ZmU0Zlx1ZmYxMC1cdWZmMTlcdWZmM2ZcdWZmNjUiOwpjb25zdCBub25BU0NJSWlkZW50aWZpZXJTdGFydCA9IG5ldyBSZWdFeHAoIlsiICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArICJdIik7CmNvbnN0IG5vbkFTQ0lJaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIlsiICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArIG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzICsgIl0iKTsKbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyA9IG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzID0gbnVsbDsKY29uc3QgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMgPSBbMCwgMTEsIDIsIDI1LCAyLCAxOCwgMiwgMSwgMiwgMTQsIDMsIDEzLCAzNSwgMTIyLCA3MCwgNTIsIDI2OCwgMjgsIDQsIDQ4LCA0OCwgMzEsIDE0LCAyOSwgNiwgMzcsIDExLCAyOSwgMywgMzUsIDUsIDcsIDIsIDQsIDQzLCAxNTcsIDE5LCAzNSwgNSwgMzUsIDUsIDM5LCA5LCA1MSwgMTMsIDEwLCAyLCAxNCwgMiwgNiwgMiwgMSwgMiwgMTAsIDIsIDE0LCAyLCA2LCAyLCAxLCA0LCA1MSwgMTMsIDMxMCwgMTAsIDIxLCAxMSwgNywgMjUsIDUsIDIsIDQxLCAyLCA4LCA3MCwgNSwgMywgMCwgMiwgNDMsIDIsIDEsIDQsIDAsIDMsIDIyLCAxMSwgMjIsIDEwLCAzMCwgNjYsIDE4LCAyLCAxLCAxMSwgMjEsIDExLCAyNSwgNywgMjUsIDM5LCA1NSwgNywgMSwgNjUsIDAsIDE2LCAzLCAyLCAyLCAyLCAyOCwgNDMsIDI4LCA0LCAyOCwgMzYsIDcsIDIsIDI3LCAyOCwgNTMsIDExLCAyMSwgMTEsIDE4LCAxNCwgMTcsIDExMSwgNzIsIDU2LCA1MCwgMTQsIDUwLCAxNCwgMzUsIDM5LCAyNywgMTAsIDIyLCAyNTEsIDQxLCA3LCAxLCAxNywgNSwgNTcsIDI4LCAxMSwgMCwgOSwgMjEsIDQzLCAxNywgNDcsIDIwLCAyOCwgMjIsIDEzLCA1MiwgNTgsIDEsIDMsIDAsIDE0LCA0NCwgMzMsIDI0LCAyNywgMzUsIDMwLCAwLCAzLCAwLCA5LCAzNCwgNCwgMCwgMTMsIDQ3LCAxNSwgMywgMjIsIDAsIDIsIDAsIDM2LCAxNywgMiwgMjQsIDIwLCAxLCA2NCwgNiwgMiwgMCwgMiwgMywgMiwgMTQsIDIsIDksIDgsIDQ2LCAzOSwgNywgMywgMSwgMywgMjEsIDIsIDYsIDIsIDEsIDIsIDQsIDQsIDAsIDE5LCAwLCAxMywgNCwgMzEsIDksIDIsIDAsIDMsIDAsIDIsIDM3LCAyLCAwLCAyNiwgMCwgMiwgMCwgNDUsIDUyLCAxOSwgMywgMjEsIDIsIDMxLCA0NywgMjEsIDEsIDIsIDAsIDE4NSwgNDYsIDQyLCAzLCAzNywgNDcsIDIxLCAwLCA2MCwgNDIsIDE0LCAwLCA3MiwgMjYsIDM4LCA2LCAxODYsIDQzLCAxMTcsIDYzLCAzMiwgNywgMywgMCwgMywgNywgMiwgMSwgMiwgMjMsIDE2LCAwLCAyLCAwLCA5NSwgNywgMywgMzgsIDE3LCAwLCAyLCAwLCAyOSwgMCwgMTEsIDM5LCA4LCAwLCAyMiwgMCwgMTIsIDQ1LCAyMCwgMCwgMTksIDcyLCAyMDAsIDMyLCAzMiwgOCwgMiwgMzYsIDE4LCAwLCA1MCwgMjksIDExMywgNiwgMiwgMSwgMiwgMzcsIDIyLCAwLCAyNiwgNSwgMiwgMSwgMiwgMzEsIDE1LCAwLCAyNCwgNDMsIDI2MSwgMTgsIDE2LCAwLCAyLCAxMiwgMiwgMzMsIDEyNSwgMCwgODAsIDkyMSwgMTAzLCAxMTAsIDE4LCAxOTUsIDI2MzcsIDk2LCAxNiwgMTA3MSwgMTgsIDUsIDI2LCAzOTk0LCA2LCA1ODIsIDY4NDIsIDI5LCAxNzYzLCA1NjgsIDgsIDMwLCAxOCwgNzgsIDE4LCAyOSwgMTksIDQ3LCAxNywgMywgMzIsIDIwLCA2LCAxOCwgNDMzLCA0NCwgMjEyLCA2MywgMzMsIDI0LCAzLCAyNCwgNDUsIDc0LCA2LCAwLCA2NywgMTIsIDY1LCAxLCAyLCAwLCAxNSwgNCwgMTAsIDczODEsIDQyLCAzMSwgOTgsIDExNCwgODcwMiwgMywgMiwgNiwgMiwgMSwgMiwgMjkwLCAxNiwgMCwgMzAsIDIsIDMsIDAsIDE1LCAzLCA5LCAzOTUsIDIzMDksIDEwNiwgNiwgMTIsIDQsIDgsIDgsIDksIDU5OTEsIDg0LCAyLCA3MCwgMiwgMSwgMywgMCwgMywgMSwgMywgMywgMiwgMTEsIDIsIDAsIDIsIDYsIDIsIDY0LCAyLCAzLCAzLCA3LCAyLCA2LCAyLCAyNywgMiwgMywgMiwgNCwgMiwgMCwgNCwgNiwgMiwgMzM5LCAzLCAyNCwgMiwgMjQsIDIsIDMwLCAyLCAyNCwgMiwgMzAsIDIsIDI0LCAyLCAzMCwgMiwgMjQsIDIsIDMwLCAyLCAyNCwgMiwgNywgMTg0NSwgMzAsIDcsIDUsIDI2MiwgNjEsIDE0NywgNDQsIDExLCA2LCAxNywgMCwgMzIyLCAyOSwgMTksIDQzLCA0ODUsIDI3LCAyMjksIDI5LCAzLCAwLCAyMDgsIDMwLCAyLCAyLCAyLCAxLCAyLCA2LCAzLCA0LCAxMCwgMSwgMjI1LCA2LCAyLCAzLCAyLCAxLCAyLCAxNCwgMiwgMTk2LCA2MCwgNjcsIDgsIDAsIDEyMDUsIDMsIDIsIDI2LCAyLCAxLCAyLCAwLCAzLCAwLCAyLCA5LCAyLCAzLCAyLCAwLCAyLCAwLCA3LCAwLCA1LCAwLCAyLCAwLCAyLCAwLCAyLCAyLCAyLCAxLCAyLCAwLCAzLCAwLCAyLCAwLCAyLCAwLCAyLCAwLCAyLCAwLCAyLCAxLCAyLCAwLCAzLCAzLCAyLCA2LCAyLCAzLCAyLCAzLCAyLCAwLCAyLCA5LCAyLCAxNiwgNiwgMiwgMiwgNCwgMiwgMTYsIDQ0MjEsIDQyNzE5LCAzMywgNDM4MSwgMywgNTc3MywgMywgNzQ3MiwgMTYsIDYyMSwgMjQ2NywgNTQxLCAxNTA3LCA0OTM4LCA2LCA4NDg5XTsKY29uc3QgYXN0cmFsSWRlbnRpZmllckNvZGVzID0gWzUwOSwgMCwgMjI3LCAwLCAxNTAsIDQsIDI5NCwgOSwgMTM2OCwgMiwgMiwgMSwgNiwgMywgNDEsIDIsIDUsIDAsIDE2NiwgMSwgNTc0LCAzLCA5LCA5LCA3LCA5LCAzMiwgNCwgMzE4LCAxLCA3OCwgNSwgNzEsIDEwLCA1MCwgMywgMTIzLCAyLCA1NCwgMTQsIDMyLCAxMCwgMywgMSwgMTEsIDMsIDQ2LCAxMCwgOCwgMCwgNDYsIDksIDcsIDIsIDM3LCAxMywgMiwgOSwgNiwgMSwgNDUsIDAsIDEzLCAyLCA0OSwgMTMsIDksIDMsIDIsIDExLCA4MywgMTEsIDcsIDAsIDMsIDAsIDE1OCwgMTEsIDYsIDksIDcsIDMsIDU2LCAxLCAyLCA2LCAzLCAxLCAzLCAyLCAxMCwgMCwgMTEsIDEsIDMsIDYsIDQsIDQsIDY4LCA4LCAyLCAwLCAzLCAwLCAyLCAzLCAyLCA0LCAyLCAwLCAxNSwgMSwgODMsIDE3LCAxMCwgOSwgNSwgMCwgODIsIDE5LCAxMywgOSwgMjE0LCA2LCAzLCA4LCAyOCwgMSwgODMsIDE2LCAxNiwgOSwgODIsIDEyLCA5LCA5LCA3LCAxOSwgNTgsIDE0LCA1LCA5LCAyNDMsIDE0LCAxNjYsIDksIDcxLCA1LCAyLCAxLCAzLCAzLCAyLCAwLCAyLCAxLCAxMywgOSwgMTIwLCA2LCAzLCA2LCA0LCAwLCAyOSwgOSwgNDEsIDYsIDIsIDMsIDksIDAsIDEwLCAxMCwgNDcsIDE1LCAxOTksIDcsIDEzNywgOSwgNTQsIDcsIDIsIDcsIDE3LCA5LCA1NywgMjEsIDIsIDEzLCAxMjMsIDUsIDQsIDAsIDIsIDEsIDIsIDYsIDIsIDAsIDksIDksIDQ5LCA0LCAyLCAxLCAyLCA0LCA5LCA5LCA1NSwgOSwgMjY2LCAzLCAxMCwgMSwgMiwgMCwgNDksIDYsIDQsIDQsIDE0LCAxMCwgNTM1MCwgMCwgNywgMTQsIDExNDY1LCAyNywgMjM0MywgOSwgODcsIDksIDM5LCA0LCA2MCwgNiwgMjYsIDksIDUzNSwgOSwgNDcwLCAwLCAyLCA1NCwgOCwgMywgODIsIDAsIDEyLCAxLCAxOTYyOCwgMSwgNDE3OCwgOSwgNTE5LCA0NSwgMywgMjIsIDU0MywgNCwgNCwgNSwgOSwgNywgMywgNiwgMzEsIDMsIDE0OSwgMiwgMTQxOCwgNDksIDUxMywgNTQsIDUsIDQ5LCA5LCAwLCAxNSwgMCwgMjMsIDQsIDIsIDE0LCAxMzYxLCA2LCAyLCAxNiwgMywgNiwgMiwgMSwgMiwgNCwgMTAxLCAwLCAxNjEsIDYsIDEwLCA5LCAzNTcsIDAsIDYyLCAxMywgNDk5LCAxMywgMjQ1LCAxLCAyLCA5LCAyMzMsIDAsIDMsIDAsIDgsIDEsIDYsIDAsIDQ3NSwgNiwgMTEwLCA2LCA2LCA5LCA0NzU5LCA5LCA3ODc3MTksIDIzOV07CmZ1bmN0aW9uIGlzSW5Bc3RyYWxTZXQoY29kZSwgc2V0KSB7CiAgbGV0IHBvcyA9IDB4MTAwMDA7CiAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IHNldC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gMikgewogICAgcG9zICs9IHNldFtpXTsKICAgIGlmIChwb3MgPiBjb2RlKSByZXR1cm4gZmFsc2U7CiAgICBwb3MgKz0gc2V0W2kgKyAxXTsKICAgIGlmIChwb3MgPj0gY29kZSkgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjb2RlKSB7CiAgaWYgKGNvZGUgPCA2NSkgcmV0dXJuIGNvZGUgPT09IDM2OwogIGlmIChjb2RlIDw9IDkwKSByZXR1cm4gdHJ1ZTsKICBpZiAoY29kZSA8IDk3KSByZXR1cm4gY29kZSA9PT0gOTU7CiAgaWYgKGNvZGUgPD0gMTIyKSByZXR1cm4gdHJ1ZTsKICBpZiAoY29kZSA8PSAweGZmZmYpIHsKICAgIHJldHVybiBjb2RlID49IDB4YWEgJiYgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKTsKICB9CiAgcmV0dXJuIGlzSW5Bc3RyYWxTZXQoY29kZSwgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMpOwp9CmZ1bmN0aW9uIGlzSWRlbnRpZmllckNoYXIoY29kZSkgewogIGlmIChjb2RlIDwgNDgpIHJldHVybiBjb2RlID09PSAzNjsKICBpZiAoY29kZSA8IDU4KSByZXR1cm4gdHJ1ZTsKICBpZiAoY29kZSA8IDY1KSByZXR1cm4gZmFsc2U7CiAgaWYgKGNvZGUgPD0gOTApIHJldHVybiB0cnVlOwogIGlmIChjb2RlIDwgOTcpIHJldHVybiBjb2RlID09PSA5NTsKICBpZiAoY29kZSA8PSAxMjIpIHJldHVybiB0cnVlOwogIGlmIChjb2RlIDw9IDB4ZmZmZikgewogICAgcmV0dXJuIGNvZGUgPj0gMHhhYSAmJiBub25BU0NJSWlkZW50aWZpZXIudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKTsKICB9CiAgcmV0dXJuIGlzSW5Bc3RyYWxTZXQoY29kZSwgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMpIHx8IGlzSW5Bc3RyYWxTZXQoY29kZSwgYXN0cmFsSWRlbnRpZmllckNvZGVzKTsKfQpmdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKG5hbWUpIHsKICBsZXQgaXNGaXJzdCA9IHRydWU7CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKSB7CiAgICBsZXQgY3AgPSBuYW1lLmNoYXJDb2RlQXQoaSk7CiAgICBpZiAoKGNwICYgMHhmYzAwKSA9PT0gMHhkODAwICYmIGkgKyAxIDwgbmFtZS5sZW5ndGgpIHsKICAgICAgY29uc3QgdHJhaWwgPSBuYW1lLmNoYXJDb2RlQXQoKytpKTsKICAgICAgaWYgKCh0cmFpbCAmIDB4ZmMwMCkgPT09IDB4ZGMwMCkgewogICAgICAgIGNwID0gMHgxMDAwMCArICgoY3AgJiAweDNmZikgPDwgMTApICsgKHRyYWlsICYgMHgzZmYpOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNGaXJzdCkgewogICAgICBpc0ZpcnN0ID0gZmFsc2U7CiAgICAgIGlmICghaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKCFpc0lkZW50aWZpZXJDaGFyKGNwKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIHJldHVybiAhaXNGaXJzdDsKfQoKLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWRlbnRpZmllci5qcy5tYXAK |
| 1 | LyoqCiAqIEBmaWxlb3ZlcnZpZXcgQWJzdHJhY3Rpb24gb2YgSmF2YVNjcmlwdCBzb3VyY2UgY29kZS4KICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwogKi8KInVzZSBzdHJpY3QiOwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gUmVxdWlyZW1lbnRzCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjb25zdAogICAgeyBpc0NvbW1lbnRUb2tlbiB9ID0gcmVxdWlyZSgiZXNsaW50LXV0aWxzIiksCiAgICBUb2tlblN0b3JlID0gcmVxdWlyZSgiLi90b2tlbi1zdG9yZSIpLAogICAgYXN0VXRpbHMgPSByZXF1aXJlKCIuLi9zaGFyZWQvYXN0LXV0aWxzIiksCiAgICBUcmF2ZXJzZXIgPSByZXF1aXJlKCIuLi9zaGFyZWQvdHJhdmVyc2VyIik7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBQcml2YXRlCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovKioKICogVmFsaWRhdGVzIHRoYXQgdGhlIGdpdmVuIEFTVCBoYXMgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLgogKiBAcGFyYW0ge0FTVE5vZGV9IGFzdCBUaGUgUHJvZ3JhbSBub2RlIG9mIHRoZSBBU1QgdG8gY2hlY2suCiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgQVNUIGRvZXNuJ3QgY29udGFpbiB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi4KICogQHJldHVybnMge3ZvaWR9CiAqIEBwcml2YXRlCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZShhc3QpIHsKICAgIGlmICghYXN0LnRva2VucykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQVNUIGlzIG1pc3NpbmcgdGhlIHRva2VucyBhcnJheS4iKTsKICAgIH0KCiAgICBpZiAoIWFzdC5jb21tZW50cykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQVNUIGlzIG1pc3NpbmcgdGhlIGNvbW1lbnRzIGFycmF5LiIpOwogICAgfQoKICAgIGlmICghYXN0LmxvYykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQVNUIGlzIG1pc3NpbmcgbG9jYXRpb24gaW5mb3JtYXRpb24uIik7CiAgICB9CgogICAgaWYgKCFhc3QucmFuZ2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFTVCBpcyBtaXNzaW5nIHJhbmdlIGluZm9ybWF0aW9uIik7CiAgICB9Cn0KCi8qKgogKiBDaGVjayB0byBzZWUgaWYgaXRzIGEgRVM2IGV4cG9ydCBkZWNsYXJhdGlvbi4KICogQHBhcmFtIHtBU1ROb2RlfSBhc3ROb2RlIEFuIEFTVCBub2RlLgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSByZXByZXNlbnRzIGFuIGV4cG9ydCBkZWNsYXJhdGlvbi4KICogQHByaXZhdGUKICovCmZ1bmN0aW9uIGxvb2tzTGlrZUV4cG9ydChhc3ROb2RlKSB7CiAgICByZXR1cm4gYXN0Tm9kZS50eXBlID09PSAiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIiB8fCBhc3ROb2RlLnR5cGUgPT09ICJFeHBvcnROYW1lZERlY2xhcmF0aW9uIiB8fAogICAgICAgIGFzdE5vZGUudHlwZSA9PT0gIkV4cG9ydEFsbERlY2xhcmF0aW9uIiB8fCBhc3ROb2RlLnR5cGUgPT09ICJFeHBvcnRTcGVjaWZpZXIiOwp9CgovKioKICogTWVyZ2VzIHR3byBzb3J0ZWQgbGlzdHMgaW50byBhIGxhcmdlciBzb3J0ZWQgbGlzdCBpbiBPKG4pIHRpbWUuCiAqIEBwYXJhbSB7VG9rZW5bXX0gdG9rZW5zIFRoZSBsaXN0IG9mIHRva2Vucy4KICogQHBhcmFtIHtUb2tlbltdfSBjb21tZW50cyBUaGUgbGlzdCBvZiBjb21tZW50cy4KICogQHJldHVybnMge1Rva2VuW119IEEgc29ydGVkIGxpc3Qgb2YgdG9rZW5zIGFuZCBjb21tZW50cy4KICogQHByaXZhdGUKICovCmZ1bmN0aW9uIHNvcnRlZE1lcmdlKHRva2VucywgY29tbWVudHMpIHsKICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgbGV0IHRva2VuSW5kZXggPSAwOwogICAgbGV0IGNvbW1lbnRJbmRleCA9IDA7CgogICAgd2hpbGUgKHRva2VuSW5kZXggPCB0b2tlbnMubGVuZ3RoIHx8IGNvbW1lbnRJbmRleCA8IGNvbW1lbnRzLmxlbmd0aCkgewogICAgICAgIGlmIChjb21tZW50SW5kZXggPj0gY29tbWVudHMubGVuZ3RoIHx8IHRva2VuSW5kZXggPCB0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbkluZGV4XS5yYW5nZVswXSA8IGNvbW1lbnRzW2NvbW1lbnRJbmRleF0ucmFuZ2VbMF0pIHsKICAgICAgICAgICAgcmVzdWx0LnB1c2godG9rZW5zW3Rva2VuSW5kZXgrK10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbW1lbnRzW2NvbW1lbnRJbmRleCsrXSk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiByZXN1bHQ7Cn0KCi8qKgogKiBEZXRlcm1pbmVzIGlmIHR3byBub2RlcyBvciB0b2tlbnMgb3ZlcmxhcC4KICogQHBhcmFtIHtBU1ROb2RlfFRva2VufSBmaXJzdCBUaGUgZmlyc3Qgbm9kZSBvciB0b2tlbiB0byBjaGVjay4KICogQHBhcmFtIHtBU1ROb2RlfFRva2VufSBzZWNvbmQgVGhlIHNlY29uZCBub2RlIG9yIHRva2VuIHRvIGNoZWNrLgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdHdvIG5vZGVzIG9yIHRva2VucyBvdmVybGFwLgogKiBAcHJpdmF0ZQogKi8KZnVuY3Rpb24gbm9kZXNPclRva2Vuc092ZXJsYXAoZmlyc3QsIHNlY29uZCkgewogICAgcmV0dXJuIChmaXJzdC5yYW5nZVswXSA8PSBzZWNvbmQucmFuZ2VbMF0gJiYgZmlyc3QucmFuZ2VbMV0gPj0gc2Vjb25kLnJhbmdlWzBdKSB8fAogICAgICAgIChzZWNvbmQucmFuZ2VbMF0gPD0gZmlyc3QucmFuZ2VbMF0gJiYgc2Vjb25kLnJhbmdlWzFdID49IGZpcnN0LnJhbmdlWzBdKTsKfQoKLyoqCiAqIERldGVybWluZXMgaWYgdHdvIG5vZGVzIG9yIHRva2VucyBoYXZlIGF0IGxlYXN0IG9uZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcgogKiBiZXR3ZWVuIHRoZW0uIE9yZGVyIGRvZXMgbm90IG1hdHRlci4gUmV0dXJucyBmYWxzZSBpZiB0aGUgZ2l2ZW4gbm9kZXMgb3IKICogdG9rZW5zIG92ZXJsYXAuCiAqIEBwYXJhbSB7U291cmNlQ29kZX0gc291cmNlQ29kZSBUaGUgc291cmNlIGNvZGUgb2JqZWN0LgogKiBAcGFyYW0ge0FTVE5vZGV8VG9rZW59IGZpcnN0IFRoZSBmaXJzdCBub2RlIG9yIHRva2VuIHRvIGNoZWNrIGJldHdlZW4uCiAqIEBwYXJhbSB7QVNUTm9kZXxUb2tlbn0gc2Vjb25kIFRoZSBzZWNvbmQgbm9kZSBvciB0b2tlbiB0byBjaGVjayBiZXR3ZWVuLgogKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrSW5zaWRlT2ZKU1hUZXh0IElmIGB0cnVlYCBpcyBwcmVzZW50LCBjaGVjayBpbnNpZGUgb2YgSlNYVGV4dCB0b2tlbnMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZXJlIGlzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgYmV0d2VlbgogKiBhbnkgb2YgdGhlIHRva2VucyBmb3VuZCBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gbm9kZXMgb3IgdG9rZW5zLgogKiBAcHVibGljCiAqLwpmdW5jdGlvbiBpc1NwYWNlQmV0d2Vlbihzb3VyY2VDb2RlLCBmaXJzdCwgc2Vjb25kLCBjaGVja0luc2lkZU9mSlNYVGV4dCkgewogICAgaWYgKG5vZGVzT3JUb2tlbnNPdmVybGFwKGZpcnN0LCBzZWNvbmQpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGNvbnN0IFtzdGFydGluZ05vZGVPclRva2VuLCBlbmRpbmdOb2RlT3JUb2tlbl0gPSBmaXJzdC5yYW5nZVsxXSA8PSBzZWNvbmQucmFuZ2VbMF0KICAgICAgICA/IFtmaXJzdCwgc2Vjb25kXQogICAgICAgIDogW3NlY29uZCwgZmlyc3RdOwogICAgY29uc3QgZmlyc3RUb2tlbiA9IHNvdXJjZUNvZGUuZ2V0TGFzdFRva2VuKHN0YXJ0aW5nTm9kZU9yVG9rZW4pIHx8IHN0YXJ0aW5nTm9kZU9yVG9rZW47CiAgICBjb25zdCBmaW5hbFRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKGVuZGluZ05vZGVPclRva2VuKSB8fCBlbmRpbmdOb2RlT3JUb2tlbjsKICAgIGxldCBjdXJyZW50VG9rZW4gPSBmaXJzdFRva2VuOwoKICAgIHdoaWxlIChjdXJyZW50VG9rZW4gIT09IGZpbmFsVG9rZW4pIHsKICAgICAgICBjb25zdCBuZXh0VG9rZW4gPSBzb3VyY2VDb2RlLmdldFRva2VuQWZ0ZXIoY3VycmVudFRva2VuLCB7IGluY2x1ZGVDb21tZW50czogdHJ1ZSB9KTsKCiAgICAgICAgaWYgKAogICAgICAgICAgICBjdXJyZW50VG9rZW4ucmFuZ2VbMV0gIT09IG5leHRUb2tlbi5yYW5nZVswXSB8fAoKICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgY2hlY2sgc3BhY2VzIGluIEpTWFRleHQuCiAgICAgICAgICAgICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvMTI2MTQKICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgIGNoZWNrSW5zaWRlT2ZKU1hUZXh0ICYmCiAgICAgICAgICAgICAgICAgICAgbmV4dFRva2VuICE9PSBmaW5hbFRva2VuICYmCiAgICAgICAgICAgICAgICAgICAgbmV4dFRva2VuLnR5cGUgPT09ICJKU1hUZXh0IiAmJgogICAgICAgICAgICAgICAgICAgIC9ccy91LnRlc3QobmV4dFRva2VuLnZhbHVlKQogICAgICAgICAgICAgICAgKQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIGN1cnJlbnRUb2tlbiA9IG5leHRUb2tlbjsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFB1YmxpYyBJbnRlcmZhY2UKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmNsYXNzIFNvdXJjZUNvZGUgZXh0ZW5kcyBUb2tlblN0b3JlIHsKCiAgICAvKioKICAgICAqIFJlcHJlc2VudHMgcGFyc2VkIHNvdXJjZSBjb2RlLgogICAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSB0ZXh0T3JDb25maWcgVGhlIHNvdXJjZSBjb2RlIHRleHQgb3IgY29uZmlnIG9iamVjdC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0T3JDb25maWcudGV4dCBUaGUgc291cmNlIGNvZGUgdGV4dC4KICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdGV4dE9yQ29uZmlnLmFzdCBUaGUgUHJvZ3JhbSBub2RlIG9mIHRoZSBBU1QgcmVwcmVzZW50aW5nIHRoZSBjb2RlLiBUaGlzIEFTVCBzaG91bGQgYmUgY3JlYXRlZCBmcm9tIHRoZSB0ZXh0IHRoYXQgQk9NIHdhcyBzdHJpcHBlZC4KICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IHRleHRPckNvbmZpZy5wYXJzZXJTZXJ2aWNlcyBUaGUgcGFyc2VyIHNlcnZpY2VzLgogICAgICogQHBhcmFtIHtTY29wZU1hbmFnZXJ8bnVsbH0gdGV4dE9yQ29uZmlnLnNjb3BlTWFuYWdlciBUaGUgc2NvcGUgb2YgdGhpcyBzb3VyY2UgY29kZS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IHRleHRPckNvbmZpZy52aXNpdG9yS2V5cyBUaGUgdmlzaXRvciBrZXlzIHRvIHRyYXZlcnNlIEFTVC4KICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gW2FzdElmTm9Db25maWddIFRoZSBQcm9ncmFtIG5vZGUgb2YgdGhlIEFTVCByZXByZXNlbnRpbmcgdGhlIGNvZGUuIFRoaXMgQVNUIHNob3VsZCBiZSBjcmVhdGVkIGZyb20gdGhlIHRleHQgdGhhdCBCT00gd2FzIHN0cmlwcGVkLgogICAgICovCiAgICBjb25zdHJ1Y3Rvcih0ZXh0T3JDb25maWcsIGFzdElmTm9Db25maWcpIHsKICAgICAgICBsZXQgdGV4dCwgYXN0LCBwYXJzZXJTZXJ2aWNlcywgc2NvcGVNYW5hZ2VyLCB2aXNpdG9yS2V5czsKCiAgICAgICAgLy8gUHJvY2VzcyBvdmVybG9hZGluZy4KICAgICAgICBpZiAodHlwZW9mIHRleHRPckNvbmZpZyA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdGV4dCA9IHRleHRPckNvbmZpZzsKICAgICAgICAgICAgYXN0ID0gYXN0SWZOb0NvbmZpZzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ZXh0T3JDb25maWcgPT09ICJvYmplY3QiICYmIHRleHRPckNvbmZpZyAhPT0gbnVsbCkgewogICAgICAgICAgICB0ZXh0ID0gdGV4dE9yQ29uZmlnLnRleHQ7CiAgICAgICAgICAgIGFzdCA9IHRleHRPckNvbmZpZy5hc3Q7CiAgICAgICAgICAgIHBhcnNlclNlcnZpY2VzID0gdGV4dE9yQ29uZmlnLnBhcnNlclNlcnZpY2VzOwogICAgICAgICAgICBzY29wZU1hbmFnZXIgPSB0ZXh0T3JDb25maWcuc2NvcGVNYW5hZ2VyOwogICAgICAgICAgICB2aXNpdG9yS2V5cyA9IHRleHRPckNvbmZpZy52aXNpdG9yS2V5czsKICAgICAgICB9CgogICAgICAgIHZhbGlkYXRlKGFzdCk7CiAgICAgICAgc3VwZXIoYXN0LnRva2VucywgYXN0LmNvbW1lbnRzKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc291cmNlIGNvZGUgaGFzIFVuaWNvZGUgQk9NLgogICAgICAgICAqIEB0eXBlIGJvb2xlYW4KICAgICAgICAgKi8KICAgICAgICB0aGlzLmhhc0JPTSA9ICh0ZXh0LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRik7CgogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBvcmlnaW5hbCB0ZXh0IHNvdXJjZSBjb2RlLgogICAgICAgICAqIEJPTSB3YXMgc3RyaXBwZWQgZnJvbSB0aGlzIHRleHQuCiAgICAgICAgICogQHR5cGUgc3RyaW5nCiAgICAgICAgICovCiAgICAgICAgdGhpcy50ZXh0ID0gKHRoaXMuaGFzQk9NID8gdGV4dC5zbGljZSgxKSA6IHRleHQpOwoKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgcGFyc2VkIEFTVCBmb3IgdGhlIHNvdXJjZSBjb2RlLgogICAgICAgICAqIEB0eXBlIEFTVE5vZGUKICAgICAgICAgKi8KICAgICAgICB0aGlzLmFzdCA9IGFzdDsKCiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIHBhcnNlciBzZXJ2aWNlcyBvZiB0aGlzIHNvdXJjZSBjb2RlLgogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCiAgICAgICAgdGhpcy5wYXJzZXJTZXJ2aWNlcyA9IHBhcnNlclNlcnZpY2VzIHx8IHt9OwoKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgc2NvcGUgb2YgdGhpcyBzb3VyY2UgY29kZS4KICAgICAgICAgKiBAdHlwZSB7U2NvcGVNYW5hZ2VyfG51bGx9CiAgICAgICAgICovCiAgICAgICAgdGhpcy5zY29wZU1hbmFnZXIgPSBzY29wZU1hbmFnZXIgfHwgbnVsbDsKCiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIHZpc2l0b3Iga2V5cyB0byB0cmF2ZXJzZSBBU1QuCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICB0aGlzLnZpc2l0b3JLZXlzID0gdmlzaXRvcktleXMgfHwgVHJhdmVyc2VyLkRFRkFVTFRfVklTSVRPUl9LRVlTOwoKICAgICAgICAvLyBDaGVjayB0aGUgc291cmNlIHRleHQgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHNoZWJhbmcgc2luY2UgaXQgaXMgcGFyc2VkIGFzIGEgc3RhbmRhcmQgbGluZSBjb21tZW50LgogICAgICAgIGNvbnN0IHNoZWJhbmdNYXRjaGVkID0gdGhpcy50ZXh0Lm1hdGNoKGFzdFV0aWxzLnNoZWJhbmdQYXR0ZXJuKTsKICAgICAgICBjb25zdCBoYXNTaGViYW5nID0gc2hlYmFuZ01hdGNoZWQgJiYgYXN0LmNvbW1lbnRzLmxlbmd0aCAmJiBhc3QuY29tbWVudHNbMF0udmFsdWUgPT09IHNoZWJhbmdNYXRjaGVkWzFdOwoKICAgICAgICBpZiAoaGFzU2hlYmFuZykgewogICAgICAgICAgICBhc3QuY29tbWVudHNbMF0udHlwZSA9ICJTaGViYW5nIjsKICAgICAgICB9CgogICAgICAgIHRoaXMudG9rZW5zQW5kQ29tbWVudHMgPSBzb3J0ZWRNZXJnZShhc3QudG9rZW5zLCBhc3QuY29tbWVudHMpOwoKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgc291cmNlIGNvZGUgc3BsaXQgaW50byBsaW5lcyBhY2NvcmRpbmcgdG8gRUNNQS0yNjIgc3BlY2lmaWNhdGlvbi4KICAgICAgICAgKiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgZWFjaCBydWxlIG5lZWRpbmcgdG8gZG8gc28gc2VwYXJhdGVseS4KICAgICAgICAgKiBAdHlwZSBzdHJpbmdbXQogICAgICAgICAqLwogICAgICAgIHRoaXMubGluZXMgPSBbXTsKICAgICAgICB0aGlzLmxpbmVTdGFydEluZGljZXMgPSBbMF07CgogICAgICAgIGNvbnN0IGxpbmVFbmRpbmdQYXR0ZXJuID0gYXN0VXRpbHMuY3JlYXRlR2xvYmFsTGluZWJyZWFrTWF0Y2hlcigpOwogICAgICAgIGxldCBtYXRjaDsKCiAgICAgICAgLyoKICAgICAgICAgKiBQcmV2aW91c2x5LCB0aGlzIHdhcyBpbXBsZW1lbnRlZCB1c2luZyBhIHJlZ2V4IHRoYXQKICAgICAgICAgKiBtYXRjaGVkIGEgc2VxdWVuY2Ugb2Ygbm9uLWxpbmVicmVhayBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5IGEKICAgICAgICAgKiBsaW5lYnJlYWssIHRoZW4gYWRkaW5nIHRoZSBsZW5ndGhzIG9mIHRoZSBtYXRjaGVzLiBIb3dldmVyLAogICAgICAgICAqIHRoaXMgY2F1c2VkIGEgY2F0YXN0cm9waGljIGJhY2t0cmFja2luZyBpc3N1ZSB3aGVuIHRoZSBlbmQKICAgICAgICAgKiBvZiBhIGZpbGUgY29udGFpbmVkIGEgbGFyZ2UgbnVtYmVyIG9mIG5vbi1uZXdsaW5lIGNoYXJhY3RlcnMuCiAgICAgICAgICogVG8gYXZvaWQgdGhpcywgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24ganVzdCBtYXRjaGVzIG5ld2xpbmVzCiAgICAgICAgICogYW5kIHVzZXMgbWF0Y2guaW5kZXggdG8gZ2V0IHRoZSBjb3JyZWN0IGxpbmUgc3RhcnQgaW5kaWNlcy4KICAgICAgICAgKi8KICAgICAgICB3aGlsZSAoKG1hdGNoID0gbGluZUVuZGluZ1BhdHRlcm4uZXhlYyh0aGlzLnRleHQpKSkgewogICAgICAgICAgICB0aGlzLmxpbmVzLnB1c2godGhpcy50ZXh0LnNsaWNlKHRoaXMubGluZVN0YXJ0SW5kaWNlc1t0aGlzLmxpbmVTdGFydEluZGljZXMubGVuZ3RoIC0gMV0sIG1hdGNoLmluZGV4KSk7CiAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0SW5kaWNlcy5wdXNoKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5saW5lcy5wdXNoKHRoaXMudGV4dC5zbGljZSh0aGlzLmxpbmVTdGFydEluZGljZXNbdGhpcy5saW5lU3RhcnRJbmRpY2VzLmxlbmd0aCAtIDFdKSk7CgogICAgICAgIC8vIENhY2hlIGZvciBjb21tZW50cyBmb3VuZCB1c2luZyBnZXRDb21tZW50cygpLgogICAgICAgIHRoaXMuX2NvbW1lbnRDYWNoZSA9IG5ldyBXZWFrTWFwKCk7CgogICAgICAgIC8vIGRvbid0IGFsbG93IG1vZGlmaWNhdGlvbiBvZiB0aGlzIG9iamVjdAogICAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7CiAgICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmxpbmVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNwbGl0IHRoZSBzb3VyY2UgY29kZSBpbnRvIG11bHRpcGxlIGxpbmVzIGJhc2VkIG9uIHRoZSBsaW5lIGRlbGltaXRlcnMuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBTb3VyY2UgY29kZSBhcyBhIHN0cmluZy4KICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQXJyYXkgb2Ygc291cmNlIGNvZGUgbGluZXMuCiAgICAgKiBAcHVibGljCiAgICAgKi8KICAgIHN0YXRpYyBzcGxpdExpbmVzKHRleHQpIHsKICAgICAgICByZXR1cm4gdGV4dC5zcGxpdChhc3RVdGlscy5jcmVhdGVHbG9iYWxMaW5lYnJlYWtNYXRjaGVyKCkpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBub2RlLgogICAgICogQHBhcmFtIHtBU1ROb2RlfSBbbm9kZV0gVGhlIEFTVCBub2RlIHRvIGdldCB0aGUgdGV4dCBmb3IuCiAgICAgKiBAcGFyYW0ge2ludH0gW2JlZm9yZUNvdW50XSBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBub2RlIHRvIHJldHJpZXZlLgogICAgICogQHBhcmFtIHtpbnR9IFthZnRlckNvdW50XSBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIG5vZGUgdG8gcmV0cmlldmUuCiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgdGV4dCByZXByZXNlbnRpbmcgdGhlIEFTVCBub2RlLgogICAgICogQHB1YmxpYwogICAgICovCiAgICBnZXRUZXh0KG5vZGUsIGJlZm9yZUNvdW50LCBhZnRlckNvdW50KSB7CiAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5zbGljZShNYXRoLm1heChub2RlLnJhbmdlWzBdIC0gKGJlZm9yZUNvdW50IHx8IDApLCAwKSwKICAgICAgICAgICAgICAgIG5vZGUucmFuZ2VbMV0gKyAoYWZ0ZXJDb3VudCB8fCAwKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBlbnRpcmUgc291cmNlIHRleHQgc3BsaXQgaW50byBhbiBhcnJheSBvZiBsaW5lcy4KICAgICAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHNvdXJjZSB0ZXh0IGFzIGFuIGFycmF5IG9mIGxpbmVzLgogICAgICogQHB1YmxpYwogICAgICovCiAgICBnZXRMaW5lcygpIHsKICAgICAgICByZXR1cm4gdGhpcy5saW5lczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhbiBhcnJheSBjb250YWluaW5nIGFsbCBjb21tZW50cyBpbiB0aGUgc291cmNlIGNvZGUuCiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZVtdfSBBbiBhcnJheSBvZiBjb21tZW50IG5vZGVzLgogICAgICogQHB1YmxpYwogICAgICovCiAgICBnZXRBbGxDb21tZW50cygpIHsKICAgICAgICByZXR1cm4gdGhpcy5hc3QuY29tbWVudHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIGFsbCBjb21tZW50cyBmb3IgdGhlIGdpdmVuIG5vZGUuCiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGdldCB0aGUgY29tbWVudHMgZm9yLgogICAgICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSBsZWFkaW5nIGFuZCB0cmFpbGluZyBhcnJheQogICAgICogICAgICBvZiBjb21tZW50cyBpbmRleGVkIGJ5IHRoZWlyIHBvc2l0aW9uLgogICAgICogQHB1YmxpYwogICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkgZ2V0Q29tbWVudHNCZWZvcmUoKSwgZ2V0Q29tbWVudHNBZnRlcigpLCBhbmQgZ2V0Q29tbWVudHNJbnNpZGUoKS4KICAgICAqLwogICAgZ2V0Q29tbWVudHMobm9kZSkgewogICAgICAgIGlmICh0aGlzLl9jb21tZW50Q2FjaGUuaGFzKG5vZGUpKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21tZW50Q2FjaGUuZ2V0KG5vZGUpOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgY29tbWVudHMgPSB7CiAgICAgICAgICAgIGxlYWRpbmc6IFtdLAogICAgICAgICAgICB0cmFpbGluZzogW10KICAgICAgICB9OwoKICAgICAgICAvKgogICAgICAgICAqIFJldHVybiBhbGwgY29tbWVudHMgYXMgbGVhZGluZyBjb21tZW50cyBvZiB0aGUgUHJvZ3JhbSBub2RlIHdoZW4KICAgICAgICAgKiB0aGVyZSBpcyBubyBleGVjdXRhYmxlIGNvZGUuCiAgICAgICAgICovCiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gIlByb2dyYW0iKSB7CiAgICAgICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICBjb21tZW50cy5sZWFkaW5nID0gbm9kZS5jb21tZW50czsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBSZXR1cm4gY29tbWVudHMgYXMgdHJhaWxpbmcgY29tbWVudHMgb2Ygbm9kZXMgdGhhdCBvbmx5IGNvbnRhaW4KICAgICAgICAgICAgICogY29tbWVudHMgKHRvIG1pbWljIHRoZSBjb21tZW50IGF0dGFjaG1lbnQgYmVoYXZpb3IgcHJlc2VudCBpbiBFc3ByZWUpLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYgKChub2RlLnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIgfHwgbm9kZS50eXBlID09PSAiQ2xhc3NCb2R5IikgJiYgbm9kZS5ib2R5Lmxlbmd0aCA9PT0gMCB8fAogICAgICAgICAgICAgICAgbm9kZS50eXBlID09PSAiT2JqZWN0RXhwcmVzc2lvbiIgJiYgbm9kZS5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCB8fAogICAgICAgICAgICAgICAgbm9kZS50eXBlID09PSAiQXJyYXlFeHByZXNzaW9uIiAmJiBub2RlLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCB8fAogICAgICAgICAgICAgICAgbm9kZS50eXBlID09PSAiU3dpdGNoU3RhdGVtZW50IiAmJiBub2RlLmNhc2VzLmxlbmd0aCA9PT0gMAogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGNvbW1lbnRzLnRyYWlsaW5nID0gdGhpcy5nZXRUb2tlbnMobm9kZSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGVDb21tZW50czogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGlzQ29tbWVudFRva2VuCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogSXRlcmF0ZSBvdmVyIHRva2VucyBiZWZvcmUgYW5kIGFmdGVyIG5vZGUgYW5kIGNvbGxlY3QgY29tbWVudCB0b2tlbnMuCiAgICAgICAgICAgICAqIERvIG5vdCBpbmNsdWRlIGNvbW1lbnRzIHRoYXQgZXhpc3Qgb3V0c2lkZSBvZiB0aGUgcGFyZW50IG5vZGUKICAgICAgICAgICAgICogdG8gYXZvaWQgZHVwbGljYXRpb24uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBsZXQgY3VycmVudFRva2VuID0gdGhpcy5nZXRUb2tlbkJlZm9yZShub2RlLCB7IGluY2x1ZGVDb21tZW50czogdHJ1ZSB9KTsKCiAgICAgICAgICAgIHdoaWxlIChjdXJyZW50VG9rZW4gJiYgaXNDb21tZW50VG9rZW4oY3VycmVudFRva2VuKSkgewogICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50ICYmIG5vZGUucGFyZW50LnR5cGUgIT09ICJQcm9ncmFtIiAmJiAoY3VycmVudFRva2VuLnN0YXJ0IDwgbm9kZS5wYXJlbnQuc3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb21tZW50cy5sZWFkaW5nLnB1c2goY3VycmVudFRva2VuKTsKICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IHRoaXMuZ2V0VG9rZW5CZWZvcmUoY3VycmVudFRva2VuLCB7IGluY2x1ZGVDb21tZW50czogdHJ1ZSB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29tbWVudHMubGVhZGluZy5yZXZlcnNlKCk7CgogICAgICAgICAgICBjdXJyZW50VG9rZW4gPSB0aGlzLmdldFRva2VuQWZ0ZXIobm9kZSwgeyBpbmNsdWRlQ29tbWVudHM6IHRydWUgfSk7CgogICAgICAgICAgICB3aGlsZSAoY3VycmVudFRva2VuICYmIGlzQ29tbWVudFRva2VuKGN1cnJlbnRUb2tlbikpIHsKICAgICAgICAgICAgICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC50eXBlICE9PSAiUHJvZ3JhbSIgJiYgKGN1cnJlbnRUb2tlbi5lbmQgPiBub2RlLnBhcmVudC5lbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb21tZW50cy50cmFpbGluZy5wdXNoKGN1cnJlbnRUb2tlbik7CiAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSB0aGlzLmdldFRva2VuQWZ0ZXIoY3VycmVudFRva2VuLCB7IGluY2x1ZGVDb21tZW50czogdHJ1ZSB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhpcy5fY29tbWVudENhY2hlLnNldChub2RlLCBjb21tZW50cyk7CiAgICAgICAgcmV0dXJuIGNvbW1lbnRzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0cmlldmVzIHRoZSBKU0RvYyBjb21tZW50IGZvciBhIGdpdmVuIG5vZGUuCiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGdldCB0aGUgY29tbWVudCBmb3IuCiAgICAgKiBAcmV0dXJucyB7VG9rZW58bnVsbH0gVGhlIEJsb2NrIGNvbW1lbnQgdG9rZW4gY29udGFpbmluZyB0aGUgSlNEb2MgY29tbWVudAogICAgICogICAgICBmb3IgdGhlIGdpdmVuIG5vZGUgb3IgbnVsbCBpZiBub3QgZm91bmQuCiAgICAgKiBAcHVibGljCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBnZXRKU0RvY0NvbW1lbnQobm9kZSkgewoKICAgICAgICAvKioKICAgICAgICAgKiBDaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIEpTRG9jIGNvbW1lbnQgZm9yIHRoZSBnaXZlbiBub2RlIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXN0Tm9kZSBUaGUgQVNUIG5vZGUgdG8gZ2V0IHRoZSBjb21tZW50IGZvci4KICAgICAgICAgKiBAcmV0dXJucyB7VG9rZW58bnVsbH0gVGhlIEJsb2NrIGNvbW1lbnQgdG9rZW4gY29udGFpbmluZyB0aGUgSlNEb2MgY29tbWVudAogICAgICAgICAqICAgICAgZm9yIHRoZSBnaXZlbiBub2RlIG9yIG51bGwgaWYgbm90IGZvdW5kLgogICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICovCiAgICAgICAgY29uc3QgZmluZEpTRG9jQ29tbWVudCA9IGFzdE5vZGUgPT4gewogICAgICAgICAgICBjb25zdCB0b2tlbkJlZm9yZSA9IHRoaXMuZ2V0VG9rZW5CZWZvcmUoYXN0Tm9kZSwgeyBpbmNsdWRlQ29tbWVudHM6IHRydWUgfSk7CgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZSAmJgogICAgICAgICAgICAgICAgaXNDb21tZW50VG9rZW4odG9rZW5CZWZvcmUpICYmCiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS50eXBlID09PSAiQmxvY2siICYmCiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS52YWx1ZS5jaGFyQXQoMCkgPT09ICIqIiAmJgogICAgICAgICAgICAgICAgYXN0Tm9kZS5sb2Muc3RhcnQubGluZSAtIHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSA8PSAxCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuQmVmb3JlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9OwogICAgICAgIGxldCBwYXJlbnQgPSBub2RlLnBhcmVudDsKCiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAiQ2xhc3NEZWNsYXJhdGlvbiI6CiAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOgogICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRKU0RvY0NvbW1lbnQobG9va3NMaWtlRXhwb3J0KHBhcmVudCkgPyBwYXJlbnQgOiBub2RlKTsKCiAgICAgICAgICAgIGNhc2UgIkNsYXNzRXhwcmVzc2lvbiI6CiAgICAgICAgICAgICAgICByZXR1cm4gZmluZEpTRG9jQ29tbWVudChwYXJlbnQucGFyZW50KTsKCiAgICAgICAgICAgIGNhc2UgIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIjoKICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb25FeHByZXNzaW9uIjoKICAgICAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSAhPT0gIkNhbGxFeHByZXNzaW9uIiAmJiBwYXJlbnQudHlwZSAhPT0gIk5ld0V4cHJlc3Npb24iKSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKAogICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5nZXRDb21tZW50c0JlZm9yZShwYXJlbnQpLmxlbmd0aCAmJgogICAgICAgICAgICAgICAgICAgICAgICAhL0Z1bmN0aW9uL3UudGVzdChwYXJlbnQudHlwZSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnR5cGUgIT09ICJNZXRob2REZWZpbml0aW9uIiAmJgogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQudHlwZSAhPT0gIlByb3BlcnR5IgogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlICE9PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIgJiYgcGFyZW50LnR5cGUgIT09ICJQcm9ncmFtIikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluZEpTRG9jQ29tbWVudChwYXJlbnQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZmluZEpTRG9jQ29tbWVudChub2RlKTsKCiAgICAgICAgICAgIC8vIGZhbGxzIHRocm91Z2gKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGRlZXBlc3Qgbm9kZSBjb250YWluaW5nIGEgcmFuZ2UgaW5kZXguCiAgICAgKiBAcGFyYW0ge2ludH0gaW5kZXggUmFuZ2UgaW5kZXggb2YgdGhlIGRlc2lyZWQgbm9kZS4KICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgbm9kZSBpZiBmb3VuZCBvciBudWxsIGlmIG5vdCBmb3VuZC4KICAgICAqIEBwdWJsaWMKICAgICAqLwogICAgZ2V0Tm9kZUJ5UmFuZ2VJbmRleChpbmRleCkgewogICAgICAgIGxldCByZXN1bHQgPSBudWxsOwoKICAgICAgICBUcmF2ZXJzZXIudHJhdmVyc2UodGhpcy5hc3QsIHsKICAgICAgICAgICAgdmlzaXRvcktleXM6IHRoaXMudmlzaXRvcktleXMsCiAgICAgICAgICAgIGVudGVyKG5vZGUpIHsKICAgICAgICAgICAgICAgIGlmIChub2RlLnJhbmdlWzBdIDw9IGluZGV4ICYmIGluZGV4IDwgbm9kZS5yYW5nZVsxXSkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5vZGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2tpcCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBsZWF2ZShub2RlKSB7CiAgICAgICAgICAgICAgICBpZiAobm9kZSA9PT0gcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5icmVhaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIHR3byBub2RlcyBvciB0b2tlbnMgaGF2ZSBhdCBsZWFzdCBvbmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXIKICAgICAqIGJldHdlZW4gdGhlbS4gT3JkZXIgZG9lcyBub3QgbWF0dGVyLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBnaXZlbiBub2RlcyBvcgogICAgICogdG9rZW5zIG92ZXJsYXAuCiAgICAgKiBAcGFyYW0ge0FTVE5vZGV8VG9rZW59IGZpcnN0IFRoZSBmaXJzdCBub2RlIG9yIHRva2VuIHRvIGNoZWNrIGJldHdlZW4uCiAgICAgKiBAcGFyYW0ge0FTVE5vZGV8VG9rZW59IHNlY29uZCBUaGUgc2Vjb25kIG5vZGUgb3IgdG9rZW4gdG8gY2hlY2sgYmV0d2Vlbi4KICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZXJlIGlzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgYmV0d2VlbgogICAgICogYW55IG9mIHRoZSB0b2tlbnMgZm91bmQgYmV0d2VlbiB0aGUgdHdvIGdpdmVuIG5vZGVzIG9yIHRva2Vucy4KICAgICAqIEBwdWJsaWMKICAgICAqLwogICAgaXNTcGFjZUJldHdlZW4oZmlyc3QsIHNlY29uZCkgewogICAgICAgIHJldHVybiBpc1NwYWNlQmV0d2Vlbih0aGlzLCBmaXJzdCwgc2Vjb25kLCBmYWxzZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIHR3byBub2RlcyBvciB0b2tlbnMgaGF2ZSBhdCBsZWFzdCBvbmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXIKICAgICAqIGJldHdlZW4gdGhlbS4gT3JkZXIgZG9lcyBub3QgbWF0dGVyLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBnaXZlbiBub2RlcyBvcgogICAgICogdG9rZW5zIG92ZXJsYXAuCiAgICAgKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZQogICAgICogYEpTWFRleHRgIHRva2VucyB0aGF0IGNvbnRhaW4gd2hpdGVzcGFjZXMgYmV0d2VlbiB0aGUgdHdvLgogICAgICogQHBhcmFtIHtBU1ROb2RlfFRva2VufSBmaXJzdCBUaGUgZmlyc3Qgbm9kZSBvciB0b2tlbiB0byBjaGVjayBiZXR3ZWVuLgogICAgICogQHBhcmFtIHtBU1ROb2RlfFRva2VufSBzZWNvbmQgVGhlIHNlY29uZCBub2RlIG9yIHRva2VuIHRvIGNoZWNrIGJldHdlZW4uCiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGVyZSBpcyBhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGJldHdlZW4KICAgICAqIGFueSBvZiB0aGUgdG9rZW5zIGZvdW5kIGJldHdlZW4gdGhlIHR3byBnaXZlbiBub2RlcyBvciB0b2tlbnMuCiAgICAgKiBAZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBpc1NwYWNlQmV0d2VlbigpLgogICAgICogQHB1YmxpYwogICAgICovCiAgICBpc1NwYWNlQmV0d2VlblRva2VucyhmaXJzdCwgc2Vjb25kKSB7CiAgICAgICAgcmV0dXJuIGlzU3BhY2VCZXR3ZWVuKHRoaXMsIGZpcnN0LCBzZWNvbmQsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBzb3VyY2UgdGV4dCBpbmRleCBpbnRvIGEgKGxpbmUsIGNvbHVtbikgcGFpci4KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgYSBjaGFyYWN0ZXIgaW4gYSBmaWxlCiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBBIHtsaW5lLCBjb2x1bW59IGxvY2F0aW9uIG9iamVjdCB3aXRoIGEgMC1pbmRleGVkIGNvbHVtbgogICAgICogQHB1YmxpYwogICAgICovCiAgICBnZXRMb2NGcm9tSW5kZXgoaW5kZXgpIHsKICAgICAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAibnVtYmVyIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBgaW5kZXhgIHRvIGJlIGEgbnVtYmVyLiIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMudGV4dC5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEluZGV4IG91dCBvZiByYW5nZSAocmVxdWVzdGVkIGluZGV4ICR7aW5kZXh9LCBidXQgc291cmNlIHRleHQgaGFzIGxlbmd0aCAke3RoaXMudGV4dC5sZW5ndGh9KS5gKTsKICAgICAgICB9CgogICAgICAgIC8qCiAgICAgICAgICogRm9yIGFuIGFyZ3VtZW50IG9mIHRoaXMudGV4dC5sZW5ndGgsIHJldHVybiB0aGUgbG9jYXRpb24gb25lICJzcG90IiBwYXN0IHRoZSBsYXN0IGNoYXJhY3RlcgogICAgICAgICAqIG9mIHRoZSBmaWxlLiBJZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaXMgYSBsaW5lYnJlYWssIHRoZSBsb2NhdGlvbiB3aWxsIGJlIGNvbHVtbiAwIG9mIHRoZSBuZXh0CiAgICAgICAgICogbGluZTsgb3RoZXJ3aXNlLCB0aGUgbG9jYXRpb24gd2lsbCBiZSBpbiB0aGUgbmV4dCBjb2x1bW4gb24gdGhlIHNhbWUgbGluZS4KICAgICAgICAgKgogICAgICAgICAqIFNlZSBnZXRJbmRleEZyb21Mb2MgZm9yIHRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIHNwZWNpYWwgY2FzZS4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMudGV4dC5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogdGhpcy5saW5lcy5sZW5ndGgsIGNvbHVtbjogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCB9OwogICAgICAgIH0KCiAgICAgICAgLyoKICAgICAgICAgKiBUbyBmaWd1cmUgb3V0IHdoaWNoIGxpbmUgaW5kZXggaXMgb24sIGRldGVybWluZSB0aGUgbGFzdCBwbGFjZSBhdCB3aGljaCBpbmRleCBjb3VsZAogICAgICAgICAqIGJlIGluc2VydGVkIGludG8gbGluZVN0YXJ0SW5kaWNlcyB0byBrZWVwIHRoZSBsaXN0IHNvcnRlZC4KICAgICAgICAgKi8KICAgICAgICBjb25zdCBsaW5lTnVtYmVyID0gaW5kZXggPj0gdGhpcy5saW5lU3RhcnRJbmRpY2VzW3RoaXMubGluZVN0YXJ0SW5kaWNlcy5sZW5ndGggLSAxXQogICAgICAgICAgICA/IHRoaXMubGluZVN0YXJ0SW5kaWNlcy5sZW5ndGgKICAgICAgICAgICAgOiB0aGlzLmxpbmVTdGFydEluZGljZXMuZmluZEluZGV4KGVsID0+IGluZGV4IDwgZWwpOwoKICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lTnVtYmVyLCBjb2x1bW46IGluZGV4IC0gdGhpcy5saW5lU3RhcnRJbmRpY2VzW2xpbmVOdW1iZXIgLSAxXSB9OwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgYSAobGluZSwgY29sdW1uKSBwYWlyIGludG8gYSByYW5nZSBpbmRleC4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsb2MgQSBsaW5lL2NvbHVtbiBsb2NhdGlvbgogICAgICogQHBhcmFtIHtudW1iZXJ9IGxvYy5saW5lIFRoZSBsaW5lIG51bWJlciBvZiB0aGUgbG9jYXRpb24gKDEtaW5kZXhlZCkKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsb2MuY29sdW1uIFRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBsb2NhdGlvbiAoMC1pbmRleGVkKQogICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHJhbmdlIGluZGV4IG9mIHRoZSBsb2NhdGlvbiBpbiB0aGUgZmlsZS4KICAgICAqIEBwdWJsaWMKICAgICAqLwogICAgZ2V0SW5kZXhGcm9tTG9jKGxvYykgewogICAgICAgIGlmICh0eXBlb2YgbG9jICE9PSAib2JqZWN0IiB8fCB0eXBlb2YgbG9jLmxpbmUgIT09ICJudW1iZXIiIHx8IHR5cGVvZiBsb2MuY29sdW1uICE9PSAibnVtYmVyIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBgbG9jYCB0byBiZSBhbiBvYmplY3Qgd2l0aCBudW1lcmljIGBsaW5lYCBhbmQgYGNvbHVtbmAgcHJvcGVydGllcy4iKTsKICAgICAgICB9CgogICAgICAgIGlmIChsb2MubGluZSA8PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBMaW5lIG51bWJlciBvdXQgb2YgcmFuZ2UgKGxpbmUgJHtsb2MubGluZX0gcmVxdWVzdGVkKS4gTGluZSBudW1iZXJzIHNob3VsZCBiZSAxLWJhc2VkLmApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGxvYy5saW5lID4gdGhpcy5saW5lU3RhcnRJbmRpY2VzLmxlbmd0aCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTGluZSBudW1iZXIgb3V0IG9mIHJhbmdlIChsaW5lICR7bG9jLmxpbmV9IHJlcXVlc3RlZCwgYnV0IG9ubHkgJHt0aGlzLmxpbmVTdGFydEluZGljZXMubGVuZ3RofSBsaW5lcyBwcmVzZW50KS5gKTsKICAgICAgICB9CgogICAgICAgIGNvbnN0IGxpbmVTdGFydEluZGV4ID0gdGhpcy5saW5lU3RhcnRJbmRpY2VzW2xvYy5saW5lIC0gMV07CiAgICAgICAgY29uc3QgbGluZUVuZEluZGV4ID0gbG9jLmxpbmUgPT09IHRoaXMubGluZVN0YXJ0SW5kaWNlcy5sZW5ndGggPyB0aGlzLnRleHQubGVuZ3RoIDogdGhpcy5saW5lU3RhcnRJbmRpY2VzW2xvYy5saW5lXTsKICAgICAgICBjb25zdCBwb3NpdGlvbkluZGV4ID0gbGluZVN0YXJ0SW5kZXggKyBsb2MuY29sdW1uOwoKICAgICAgICAvKgogICAgICAgICAqIEJ5IGRlc2lnbiwgZ2V0SW5kZXhGcm9tTG9jKHsgbGluZTogbGluZU51bSwgY29sdW1uOiAwIH0pIHNob3VsZCByZXR1cm4gdGhlIHN0YXJ0IGluZGV4IG9mCiAgICAgICAgICogdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHRoYXQgdGhlIGxpbmUgbnVtYmVyIGlzIHZhbGlkIGVsZW1lbnQgb2YgdGhpcy5saW5lcy4gU2luY2UgdGhlCiAgICAgICAgICogbGFzdCBlbGVtZW50IG9mIHRoaXMubGluZXMgaXMgYW4gZW1wdHkgc3RyaW5nIGZvciBmaWxlcyB3aXRoIHRyYWlsaW5nIG5ld2xpbmVzLCBhZGQgYQogICAgICAgICAqIHNwZWNpYWwgY2FzZSB3aGVyZSBnZXR0aW5nIHRoZSBpbmRleCBmb3IgdGhlIGZpcnN0IGxvY2F0aW9uIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGZpbGUKICAgICAgICAgKiB3aWxsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlLCByYXRoZXIgdGhhbiB0aHJvd2luZyBhbiBlcnJvci4gVGhpcyBhbGxvd3MgcnVsZXMgdG8KICAgICAgICAgKiB1c2UgZ2V0SW5kZXhGcm9tTG9jIGNvbnNpc3RlbnRseSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGVkZ2UgY2FzZXMgYXQgdGhlIGVuZCBvZiBhIGZpbGUuCiAgICAgICAgICovCiAgICAgICAgaWYgKAogICAgICAgICAgICBsb2MubGluZSA9PT0gdGhpcy5saW5lU3RhcnRJbmRpY2VzLmxlbmd0aCAmJiBwb3NpdGlvbkluZGV4ID4gbGluZUVuZEluZGV4IHx8CiAgICAgICAgICAgIGxvYy5saW5lIDwgdGhpcy5saW5lU3RhcnRJbmRpY2VzLmxlbmd0aCAmJiBwb3NpdGlvbkluZGV4ID49IGxpbmVFbmRJbmRleAogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ29sdW1uIG51bWJlciBvdXQgb2YgcmFuZ2UgKGNvbHVtbiAke2xvYy5jb2x1bW59IHJlcXVlc3RlZCwgYnV0IHRoZSBsZW5ndGggb2YgbGluZSAke2xvYy5saW5lfSBpcyAke2xpbmVFbmRJbmRleCAtIGxpbmVTdGFydEluZGV4fSkuYCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcG9zaXRpb25JbmRleDsKICAgIH0KfQoKbW9kdWxlLmV4cG9ydHMgPSBTb3VyY2VDb2RlOwo= |
| 1 | J3VzZSBzdHJpY3QnOwoKLyoqCiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLgogKgogKiBAY2xhc3MKICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLgogKi8KZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHsKICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwp9CgpDYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7Cn07CgpDYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlOwoKbW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7Cg== |
| 1 | LyoqCiAqIEBmaWxlb3ZlcnZpZXcgU3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhdGVtZW50cyBhbGxvd2VkIHBlciBsaW5lLgogKiBAYXV0aG9yIEtlbm5ldGggV2lsbGlhbXMKICovCiJ1c2Ugc3RyaWN0IjsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFJlcXVpcmVtZW50cwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY29uc3QgYXN0VXRpbHMgPSByZXF1aXJlKCIuL3V0aWxzL2FzdC11dGlscyIpOwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gUnVsZSBEZWZpbml0aW9uCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgptb2R1bGUuZXhwb3J0cyA9IHsKICAgIG1ldGE6IHsKICAgICAgICB0eXBlOiAibGF5b3V0IiwKCiAgICAgICAgZG9jczogewogICAgICAgICAgICBkZXNjcmlwdGlvbjogImVuZm9yY2UgYSBtYXhpbXVtIG51bWJlciBvZiBzdGF0ZW1lbnRzIGFsbG93ZWQgcGVyIGxpbmUiLAogICAgICAgICAgICBjYXRlZ29yeTogIlN0eWxpc3RpYyBJc3N1ZXMiLAogICAgICAgICAgICByZWNvbW1lbmRlZDogZmFsc2UsCiAgICAgICAgICAgIHVybDogImh0dHBzOi8vZXNsaW50Lm9yZy9kb2NzL3J1bGVzL21heC1zdGF0ZW1lbnRzLXBlci1saW5lIgogICAgICAgIH0sCgogICAgICAgIHNjaGVtYTogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0eXBlOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICAgICAgICAgICAgICBtYXg6IHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogImludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZQogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICBtZXNzYWdlczogewogICAgICAgICAgICBleGNlZWQ6ICJUaGlzIGxpbmUgaGFzIHt7bnVtYmVyT2ZTdGF0ZW1lbnRzT25UaGlzTGluZX19IHt7c3RhdGVtZW50c319LiBNYXhpbXVtIGFsbG93ZWQgaXMge3ttYXhTdGF0ZW1lbnRzUGVyTGluZX19LiIKICAgICAgICB9CiAgICB9LAoKICAgIGNyZWF0ZShjb250ZXh0KSB7CgogICAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKSwKICAgICAgICAgICAgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fSwKICAgICAgICAgICAgbWF4U3RhdGVtZW50c1BlckxpbmUgPSB0eXBlb2Ygb3B0aW9ucy5tYXggIT09ICJ1bmRlZmluZWQiID8gb3B0aW9ucy5tYXggOiAxOwoKICAgICAgICBsZXQgbGFzdFN0YXRlbWVudExpbmUgPSAwLAogICAgICAgICAgICBudW1iZXJPZlN0YXRlbWVudHNPblRoaXNMaW5lID0gMCwKICAgICAgICAgICAgZmlyc3RFeHRyYVN0YXRlbWVudDsKCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIC8vIEhlbHBlcnMKICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgIGNvbnN0IFNJTkdMRV9DSElMRF9BTExPV0VEID0gL14oPzooPzpEb1doaWxlfEZvcnxGb3JJbnxGb3JPZnxJZnxMYWJlbGVkfFdoaWxlKVN0YXRlbWVudHxFeHBvcnQoPzpEZWZhdWx0fE5hbWVkKURlY2xhcmF0aW9uKSQvdTsKCiAgICAgICAgLyoqCiAgICAgICAgICogUmVwb3J0cyB3aXRoIHRoZSBmaXJzdCBleHRyYSBzdGF0ZW1lbnQsIGFuZCBjbGVhcnMgaXQuCiAgICAgICAgICogQHJldHVybnMge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gcmVwb3J0Rmlyc3RFeHRyYVN0YXRlbWVudEFuZENsZWFyKCkgewogICAgICAgICAgICBpZiAoZmlyc3RFeHRyYVN0YXRlbWVudCkgewogICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoewogICAgICAgICAgICAgICAgICAgIG5vZGU6IGZpcnN0RXh0cmFTdGF0ZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUlkOiAiZXhjZWVkIiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mU3RhdGVtZW50c09uVGhpc0xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1heFN0YXRlbWVudHNQZXJMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzOiBudW1iZXJPZlN0YXRlbWVudHNPblRoaXNMaW5lID09PSAxID8gInN0YXRlbWVudCIgOiAic3RhdGVtZW50cyIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmaXJzdEV4dHJhU3RhdGVtZW50ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdldHMgdGhlIGFjdHVhbCBsYXN0IHRva2VuIG9mIGEgZ2l2ZW4gbm9kZS4KICAgICAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQSBub2RlIHRvIGdldC4gVGhpcyBpcyBhIG5vZGUgZXhjZXB0IEVtcHR5U3RhdGVtZW50LgogICAgICAgICAqIEByZXR1cm5zIHtUb2tlbn0gVGhlIGFjdHVhbCBsYXN0IHRva2VuLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFjdHVhbExhc3RUb2tlbihub2RlKSB7CiAgICAgICAgICAgIHJldHVybiBzb3VyY2VDb2RlLmdldExhc3RUb2tlbihub2RlLCBhc3RVdGlscy5pc05vdFNlbWljb2xvblRva2VuKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEFkZHJlc3NlcyBhIGdpdmVuIG5vZGUuCiAgICAgICAgICogSXQgdXBkYXRlcyB0aGUgc3RhdGUgb2YgdGhpcyBydWxlLCB0aGVuIHJlcG9ydHMgdGhlIG5vZGUgaWYgdGhlIG5vZGUgdmlvbGF0ZWQgdGhpcyBydWxlLgogICAgICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBBIG5vZGUgdG8gY2hlY2suCiAgICAgICAgICogQHJldHVybnMge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZW50ZXJTdGF0ZW1lbnQobm9kZSkgewogICAgICAgICAgICBjb25zdCBsaW5lID0gbm9kZS5sb2Muc3RhcnQubGluZTsKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIFNraXAgdG8gYWxsb3cgbm9uLWJsb2NrIHN0YXRlbWVudHMgaWYgdGhpcyBpcyBkaXJlY3QgY2hpbGQgb2YgY29udHJvbCBzdGF0ZW1lbnRzLgogICAgICAgICAgICAgKiBgaWYgKGEpIGZvbygpO2AgaXMgY291bnRlZCBhcyAxLgogICAgICAgICAgICAgKiBCdXQgYGlmIChhKSBmb28oKTsgZWxzZSBmb28oKTtgIHNob3VsZCBiZSBjb3VudGVkIGFzIDIuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBpZiAoU0lOR0xFX0NISUxEX0FMTE9XRUQudGVzdChub2RlLnBhcmVudC50eXBlKSAmJgogICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQuYWx0ZXJuYXRlICE9PSBub2RlCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBVcGRhdGUgc3RhdGUuCiAgICAgICAgICAgIGlmIChsaW5lID09PSBsYXN0U3RhdGVtZW50TGluZSkgewogICAgICAgICAgICAgICAgbnVtYmVyT2ZTdGF0ZW1lbnRzT25UaGlzTGluZSArPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVwb3J0Rmlyc3RFeHRyYVN0YXRlbWVudEFuZENsZWFyKCk7CiAgICAgICAgICAgICAgICBudW1iZXJPZlN0YXRlbWVudHNPblRoaXNMaW5lID0gMTsKICAgICAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnRMaW5lID0gbGluZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gUmVwb3J0cyBpZiB0aGUgbm9kZSB2aW9sYXRlZCB0aGlzIHJ1bGUuCiAgICAgICAgICAgIGlmIChudW1iZXJPZlN0YXRlbWVudHNPblRoaXNMaW5lID09PSBtYXhTdGF0ZW1lbnRzUGVyTGluZSArIDEpIHsKICAgICAgICAgICAgICAgIGZpcnN0RXh0cmFTdGF0ZW1lbnQgPSBmaXJzdEV4dHJhU3RhdGVtZW50IHx8IG5vZGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFVwZGF0ZXMgdGhlIHN0YXRlIG9mIHRoaXMgcnVsZSB3aXRoIHRoZSBlbmQgbGluZSBvZiBsZWF2aW5nIG5vZGUgdG8gY2hlY2sgd2l0aCB0aGUgbmV4dCBzdGF0ZW1lbnQuCiAgICAgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEEgbm9kZSB0byBjaGVjay4KICAgICAgICAgKiBAcmV0dXJucyB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBsZWF2ZVN0YXRlbWVudChub2RlKSB7CiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBnZXRBY3R1YWxMYXN0VG9rZW4obm9kZSkubG9jLmVuZC5saW5lOwoKICAgICAgICAgICAgLy8gVXBkYXRlIHN0YXRlLgogICAgICAgICAgICBpZiAobGluZSAhPT0gbGFzdFN0YXRlbWVudExpbmUpIHsKICAgICAgICAgICAgICAgIHJlcG9ydEZpcnN0RXh0cmFTdGF0ZW1lbnRBbmRDbGVhcigpOwogICAgICAgICAgICAgICAgbnVtYmVyT2ZTdGF0ZW1lbnRzT25UaGlzTGluZSA9IDE7CiAgICAgICAgICAgICAgICBsYXN0U3RhdGVtZW50TGluZSA9IGxpbmU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAvLyBQdWJsaWMgQVBJCiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBCcmVha1N0YXRlbWVudDogZW50ZXJTdGF0ZW1lbnQsCiAgICAgICAgICAgIENsYXNzRGVjbGFyYXRpb246IGVudGVyU3RhdGVtZW50LAogICAgICAgICAgICBDb250aW51ZVN0YXRlbWVudDogZW50ZXJTdGF0ZW1lbnQsCiAgICAgICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiBlbnRlclN0YXRlbWVudCwKICAgICAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogZW50ZXJTdGF0ZW1lbnQsCiAgICAgICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IGVudGVyU3RhdGVtZW50LAogICAgICAgICAgICBGb3JJblN0YXRlbWVudDogZW50ZXJTdGF0ZW1lbnQsCiAgICAgICAgICAgIEZvck9mU3RhdGVtZW50OiBlbnRlclN0YXRlbWVudCwKICAgICAgICAgICAgRm9yU3RhdGVtZW50OiBlbnRlclN0YXRlbWVudCwKICAgICAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogZW50ZXJTdGF0ZW1lbnQsCiAgICAgICAgICAgIElmU3RhdGVtZW50OiBlbnRlclN0YXRlbWVudCwKICAgICAgICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGVudGVyU3RhdGVtZW50LAogICAgICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiBlbnRlclN0YXRlbWVudCwKICAgICAgICAgICAgUmV0dXJuU3RhdGVtZW50OiBlbnRlclN0YXRlbWVudCwKICAgICAgICAgICAgU3dpdGNoU3RhdGVtZW50OiBlbnRlclN0YXRlbWVudCwKICAgICAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IGVudGVyU3RhdGVtZW50LAogICAgICAgICAgICBUcnlTdGF0ZW1lbnQ6IGVudGVyU3RhdGVtZW50LAogICAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBlbnRlclN0YXRlbWVudCwKICAgICAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6IGVudGVyU3RhdGVtZW50LAogICAgICAgICAgICBXaXRoU3RhdGVtZW50OiBlbnRlclN0YXRlbWVudCwKICAgICAgICAgICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogZW50ZXJTdGF0ZW1lbnQsCiAgICAgICAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogZW50ZXJTdGF0ZW1lbnQsCiAgICAgICAgICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiBlbnRlclN0YXRlbWVudCwKCiAgICAgICAgICAgICJCcmVha1N0YXRlbWVudDpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJDbGFzc0RlY2xhcmF0aW9uOmV4aXQiOiBsZWF2ZVN0YXRlbWVudCwKICAgICAgICAgICAgIkNvbnRpbnVlU3RhdGVtZW50OmV4aXQiOiBsZWF2ZVN0YXRlbWVudCwKICAgICAgICAgICAgIkRlYnVnZ2VyU3RhdGVtZW50OmV4aXQiOiBsZWF2ZVN0YXRlbWVudCwKICAgICAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQ6ZXhpdCI6IGxlYXZlU3RhdGVtZW50LAogICAgICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudDpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJGb3JJblN0YXRlbWVudDpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJGb3JPZlN0YXRlbWVudDpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJGb3JTdGF0ZW1lbnQ6ZXhpdCI6IGxlYXZlU3RhdGVtZW50LAogICAgICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJJZlN0YXRlbWVudDpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJJbXBvcnREZWNsYXJhdGlvbjpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJMYWJlbGVkU3RhdGVtZW50OmV4aXQiOiBsZWF2ZVN0YXRlbWVudCwKICAgICAgICAgICAgIlJldHVyblN0YXRlbWVudDpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQ6ZXhpdCI6IGxlYXZlU3RhdGVtZW50LAogICAgICAgICAgICAiVGhyb3dTdGF0ZW1lbnQ6ZXhpdCI6IGxlYXZlU3RhdGVtZW50LAogICAgICAgICAgICAiVHJ5U3RhdGVtZW50OmV4aXQiOiBsZWF2ZVN0YXRlbWVudCwKICAgICAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb246ZXhpdCI6IGxlYXZlU3RhdGVtZW50LAogICAgICAgICAgICAiV2hpbGVTdGF0ZW1lbnQ6ZXhpdCI6IGxlYXZlU3RhdGVtZW50LAogICAgICAgICAgICAiV2l0aFN0YXRlbWVudDpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJFeHBvcnROYW1lZERlY2xhcmF0aW9uOmV4aXQiOiBsZWF2ZVN0YXRlbWVudCwKICAgICAgICAgICAgIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJFeHBvcnRBbGxEZWNsYXJhdGlvbjpleGl0IjogbGVhdmVTdGF0ZW1lbnQsCiAgICAgICAgICAgICJQcm9ncmFtOmV4aXQiOiByZXBvcnRGaXJzdEV4dHJhU3RhdGVtZW50QW5kQ2xlYXIKICAgICAgICB9OwogICAgfQp9Owo= |
| 1 | J3VzZSBzdHJpY3QnCgovLyB0aGlzW0JVRkZFUl0gaXMgdGhlIHJlbWFpbmRlciBvZiBhIGNodW5rIGlmIHdlJ3JlIHdhaXRpbmcgZm9yCi8vIHRoZSBmdWxsIDUxMiBieXRlcyBvZiBhIGhlYWRlciB0byBjb21lIGluLiAgV2Ugd2lsbCBCdWZmZXIuY29uY2F0KCkKLy8gaXQgdG8gdGhlIG5leHQgd3JpdGUoKSwgd2hpY2ggaXMgYSBtZW0gY29weSwgYnV0IGEgc21hbGwgb25lLgovLwovLyB0aGlzW1FVRVVFXSBpcyBhIFlhbGxpc3Qgb2YgZW50cmllcyB0aGF0IGhhdmVuJ3QgYmVlbiBlbWl0dGVkCi8vIHlldCB0aGlzIGNhbiBvbmx5IGdldCBmaWxsZWQgdXAgaWYgdGhlIHVzZXIga2VlcHMgd3JpdGUoKWluZyBhZnRlcgovLyBhIHdyaXRlKCkgcmV0dXJucyBmYWxzZSwgb3IgZG9lcyBhIHdyaXRlKCkgd2l0aCBtb3JlIHRoYW4gb25lIGVudHJ5Ci8vCi8vIFdlIGRvbid0IGJ1ZmZlciBjaHVua3MsIHdlIGFsd2F5cyBwYXJzZSB0aGVtIGFuZCBlaXRoZXIgY3JlYXRlIGFuCi8vIGVudHJ5LCBvciBwdXNoIGl0IGludG8gdGhlIGFjdGl2ZSBlbnRyeS4gIFRoZSBSZWFkRW50cnkgY2xhc3Mga25vd3MKLy8gdG8gdGhyb3cgZGF0YSBhd2F5IGlmIC5pZ25vcmU9dHJ1ZQovLwovLyBTaGlmdCBlbnRyeSBvZmYgdGhlIGJ1ZmZlciB3aGVuIGl0IGVtaXRzICdlbmQnLCBhbmQgZW1pdCAnZW50cnknIGZvcgovLyB0aGUgbmV4dCBvbmUgaW4gdGhlIGxpc3QuCi8vCi8vIEF0IGFueSB0aW1lLCB3ZSdyZSBwdXNoaW5nIGJvZHkgY2h1bmtzIGludG8gdGhlIGVudHJ5IGF0IFdSSVRFRU5UUlksCi8vIGFuZCB3YWl0aW5nIGZvciAnZW5kJyBvbiB0aGUgZW50cnkgYXQgUkVBREVOVFJZCi8vCi8vIGlnbm9yZWQgZW50cmllcyBnZXQgLnJlc3VtZSgpIGNhbGxlZCBvbiB0aGVtIHN0cmFpZ2h0IGF3YXkKCmNvbnN0IHdhcm5lciA9IHJlcXVpcmUoJy4vd2Fybi1taXhpbi5qcycpCmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJykKY29uc3QgSGVhZGVyID0gcmVxdWlyZSgnLi9oZWFkZXIuanMnKQpjb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpCmNvbnN0IFlhbGxpc3QgPSByZXF1aXJlKCd5YWxsaXN0JykKY29uc3QgbWF4TWV0YUVudHJ5U2l6ZSA9IDEwMjQgKiAxMDI0CmNvbnN0IEVudHJ5ID0gcmVxdWlyZSgnLi9yZWFkLWVudHJ5LmpzJykKY29uc3QgUGF4ID0gcmVxdWlyZSgnLi9wYXguanMnKQpjb25zdCB6bGliID0gcmVxdWlyZSgnbWluaXpsaWInKQoKY29uc3QgZ3ppcEhlYWRlciA9IEJ1ZmZlci5mcm9tKFsweDFmLCAweDhiXSkKY29uc3QgU1RBVEUgPSBTeW1ib2woJ3N0YXRlJykKY29uc3QgV1JJVEVFTlRSWSA9IFN5bWJvbCgnd3JpdGVFbnRyeScpCmNvbnN0IFJFQURFTlRSWSA9IFN5bWJvbCgncmVhZEVudHJ5JykKY29uc3QgTkVYVEVOVFJZID0gU3ltYm9sKCduZXh0RW50cnknKQpjb25zdCBQUk9DRVNTRU5UUlkgPSBTeW1ib2woJ3Byb2Nlc3NFbnRyeScpCmNvbnN0IEVYID0gU3ltYm9sKCdleHRlbmRlZEhlYWRlcicpCmNvbnN0IEdFWCA9IFN5bWJvbCgnZ2xvYmFsRXh0ZW5kZWRIZWFkZXInKQpjb25zdCBNRVRBID0gU3ltYm9sKCdtZXRhJykKY29uc3QgRU1JVE1FVEEgPSBTeW1ib2woJ2VtaXRNZXRhJykKY29uc3QgQlVGRkVSID0gU3ltYm9sKCdidWZmZXInKQpjb25zdCBRVUVVRSA9IFN5bWJvbCgncXVldWUnKQpjb25zdCBFTkRFRCA9IFN5bWJvbCgnZW5kZWQnKQpjb25zdCBFTUlUVEVERU5EID0gU3ltYm9sKCdlbWl0dGVkRW5kJykKY29uc3QgRU1JVCA9IFN5bWJvbCgnZW1pdCcpCmNvbnN0IFVOWklQID0gU3ltYm9sKCd1bnppcCcpCmNvbnN0IENPTlNVTUVDSFVOSyA9IFN5bWJvbCgnY29uc3VtZUNodW5rJykKY29uc3QgQ09OU1VNRUNIVU5LU1VCID0gU3ltYm9sKCdjb25zdW1lQ2h1bmtTdWInKQpjb25zdCBDT05TVU1FQk9EWSA9IFN5bWJvbCgnY29uc3VtZUJvZHknKQpjb25zdCBDT05TVU1FTUVUQSA9IFN5bWJvbCgnY29uc3VtZU1ldGEnKQpjb25zdCBDT05TVU1FSEVBREVSID0gU3ltYm9sKCdjb25zdW1lSGVhZGVyJykKY29uc3QgQ09OU1VNSU5HID0gU3ltYm9sKCdjb25zdW1pbmcnKQpjb25zdCBCVUZGRVJDT05DQVQgPSBTeW1ib2woJ2J1ZmZlckNvbmNhdCcpCmNvbnN0IE1BWUJFRU5EID0gU3ltYm9sKCdtYXliZUVuZCcpCmNvbnN0IFdSSVRJTkcgPSBTeW1ib2woJ3dyaXRpbmcnKQpjb25zdCBBQk9SVEVEID0gU3ltYm9sKCdhYm9ydGVkJykKY29uc3QgRE9ORSA9IFN5bWJvbCgnb25Eb25lJykKY29uc3QgU0FXX1ZBTElEX0VOVFJZID0gU3ltYm9sKCdzYXdWYWxpZEVudHJ5JykKY29uc3QgU0FXX05VTExfQkxPQ0sgPSBTeW1ib2woJ3Nhd051bGxCbG9jaycpCmNvbnN0IFNBV19FT0YgPSBTeW1ib2woJ3Nhd0VPRicpCgpjb25zdCBub29wID0gXyA9PiB0cnVlCgptb2R1bGUuZXhwb3J0cyA9IHdhcm5lcihjbGFzcyBQYXJzZXIgZXh0ZW5kcyBFRSB7CiAgY29uc3RydWN0b3IgKG9wdCkgewogICAgb3B0ID0gb3B0IHx8IHt9CiAgICBzdXBlcihvcHQpCgogICAgdGhpcy5maWxlID0gb3B0LmZpbGUgfHwgJycKCiAgICAvLyBzZXQgdG8gYm9vbGVhbiBmYWxzZSB3aGVuIGFuIGVudHJ5IHN0YXJ0cy4gIDEwMjQgYnl0ZXMgb2YgXDAKICAgIC8vIGlzIHRlY2huaWNhbGx5IGEgdmFsaWQgdGFyYmFsbCwgYWxiZWl0IGEgYm9yaW5nIG9uZS4KICAgIHRoaXNbU0FXX1ZBTElEX0VOVFJZXSA9IG51bGwKCiAgICAvLyB0aGVzZSBCQURBUkNISVZFIGVycm9ycyBjYW4ndCBiZSBkZXRlY3RlZCBlYXJseS4gbGlzdGVuIG9uIERPTkUuCiAgICB0aGlzLm9uKERPTkUsIF8gPT4gewogICAgICBpZiAodGhpc1tTVEFURV0gPT09ICdiZWdpbicgfHwgdGhpc1tTQVdfVkFMSURfRU5UUlldID09PSBmYWxzZSkgewogICAgICAgIC8vIGVpdGhlciBsZXNzIHRoYW4gMSBibG9jayBvZiBkYXRhLCBvciBhbGwgZW50cmllcyB3ZXJlIGludmFsaWQuCiAgICAgICAgLy8gRWl0aGVyIHdheSwgcHJvYmFibHkgbm90IGV2ZW4gYSB0YXJiYWxsLgogICAgICAgIHRoaXMud2FybignVEFSX0JBRF9BUkNISVZFJywgJ1VucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcpCiAgICAgIH0KICAgIH0pCgogICAgaWYgKG9wdC5vbmRvbmUpCiAgICAgIHRoaXMub24oRE9ORSwgb3B0Lm9uZG9uZSkKICAgIGVsc2UKICAgICAgdGhpcy5vbihET05FLCBfID0+IHsKICAgICAgICB0aGlzLmVtaXQoJ3ByZWZpbmlzaCcpCiAgICAgICAgdGhpcy5lbWl0KCdmaW5pc2gnKQogICAgICAgIHRoaXMuZW1pdCgnZW5kJykKICAgICAgICB0aGlzLmVtaXQoJ2Nsb3NlJykKICAgICAgfSkKCiAgICB0aGlzLnN0cmljdCA9ICEhb3B0LnN0cmljdAogICAgdGhpcy5tYXhNZXRhRW50cnlTaXplID0gb3B0Lm1heE1ldGFFbnRyeVNpemUgfHwgbWF4TWV0YUVudHJ5U2l6ZQogICAgdGhpcy5maWx0ZXIgPSB0eXBlb2Ygb3B0LmZpbHRlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdC5maWx0ZXIgOiBub29wCgogICAgLy8gaGF2ZSB0byBzZXQgdGhpcyBzbyB0aGF0IHN0cmVhbXMgYXJlIG9rIHBpcGluZyBpbnRvIGl0CiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZQogICAgdGhpcy5yZWFkYWJsZSA9IGZhbHNlCgogICAgdGhpc1tRVUVVRV0gPSBuZXcgWWFsbGlzdCgpCiAgICB0aGlzW0JVRkZFUl0gPSBudWxsCiAgICB0aGlzW1JFQURFTlRSWV0gPSBudWxsCiAgICB0aGlzW1dSSVRFRU5UUlldID0gbnVsbAogICAgdGhpc1tTVEFURV0gPSAnYmVnaW4nCiAgICB0aGlzW01FVEFdID0gJycKICAgIHRoaXNbRVhdID0gbnVsbAogICAgdGhpc1tHRVhdID0gbnVsbAogICAgdGhpc1tFTkRFRF0gPSBmYWxzZQogICAgdGhpc1tVTlpJUF0gPSBudWxsCiAgICB0aGlzW0FCT1JURURdID0gZmFsc2UKICAgIHRoaXNbU0FXX05VTExfQkxPQ0tdID0gZmFsc2UKICAgIHRoaXNbU0FXX0VPRl0gPSBmYWxzZQogICAgaWYgKHR5cGVvZiBvcHQub253YXJuID09PSAnZnVuY3Rpb24nKQogICAgICB0aGlzLm9uKCd3YXJuJywgb3B0Lm9ud2FybikKICAgIGlmICh0eXBlb2Ygb3B0Lm9uZW50cnkgPT09ICdmdW5jdGlvbicpCiAgICAgIHRoaXMub24oJ2VudHJ5Jywgb3B0Lm9uZW50cnkpCiAgfQoKICBbQ09OU1VNRUhFQURFUl0gKGNodW5rLCBwb3NpdGlvbikgewogICAgaWYgKHRoaXNbU0FXX1ZBTElEX0VOVFJZXSA9PT0gbnVsbCkKICAgICAgdGhpc1tTQVdfVkFMSURfRU5UUlldID0gZmFsc2UKICAgIGxldCBoZWFkZXIKICAgIHRyeSB7CiAgICAgIGhlYWRlciA9IG5ldyBIZWFkZXIoY2h1bmssIHBvc2l0aW9uLCB0aGlzW0VYXSwgdGhpc1tHRVhdKQogICAgfSBjYXRjaCAoZXIpIHsKICAgICAgcmV0dXJuIHRoaXMud2FybignVEFSX0VOVFJZX0lOVkFMSUQnLCBlcikKICAgIH0KCiAgICBpZiAoaGVhZGVyLm51bGxCbG9jaykgewogICAgICBpZiAodGhpc1tTQVdfTlVMTF9CTE9DS10pIHsKICAgICAgICB0aGlzW1NBV19FT0ZdID0gdHJ1ZQogICAgICAgIC8vIGVuZGluZyBhbiBhcmNoaXZlIHdpdGggbm8gZW50cmllcy4gIHBvaW50bGVzcywgYnV0IGxlZ2FsLgogICAgICAgIGlmICh0aGlzW1NUQVRFXSA9PT0gJ2JlZ2luJykKICAgICAgICAgIHRoaXNbU1RBVEVdID0gJ2hlYWRlcicKICAgICAgICB0aGlzW0VNSVRdKCdlb2YnKQogICAgICB9IGVsc2UgewogICAgICAgIHRoaXNbU0FXX05VTExfQkxPQ0tdID0gdHJ1ZQogICAgICAgIHRoaXNbRU1JVF0oJ251bGxCbG9jaycpCiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRoaXNbU0FXX05VTExfQkxPQ0tdID0gZmFsc2UKICAgICAgaWYgKCFoZWFkZXIuY2tzdW1WYWxpZCkKICAgICAgICB0aGlzLndhcm4oJ1RBUl9FTlRSWV9JTlZBTElEJywgJ2NoZWNrc3VtIGZhaWx1cmUnLCB7aGVhZGVyfSkKICAgICAgZWxzZSBpZiAoIWhlYWRlci5wYXRoKQogICAgICAgIHRoaXMud2FybignVEFSX0VOVFJZX0lOVkFMSUQnLCAncGF0aCBpcyByZXF1aXJlZCcsIHtoZWFkZXJ9KQogICAgICBlbHNlIHsKICAgICAgICBjb25zdCB0eXBlID0gaGVhZGVyLnR5cGUKICAgICAgICBpZiAoL14oU3ltYm9saWMpP0xpbmskLy50ZXN0KHR5cGUpICYmICFoZWFkZXIubGlua3BhdGgpCiAgICAgICAgICB0aGlzLndhcm4oJ1RBUl9FTlRSWV9JTlZBTElEJywgJ2xpbmtwYXRoIHJlcXVpcmVkJywge2hlYWRlcn0pCiAgICAgICAgZWxzZSBpZiAoIS9eKFN5bWJvbGljKT9MaW5rJC8udGVzdCh0eXBlKSAmJiBoZWFkZXIubGlua3BhdGgpCiAgICAgICAgICB0aGlzLndhcm4oJ1RBUl9FTlRSWV9JTlZBTElEJywgJ2xpbmtwYXRoIGZvcmJpZGRlbicsIHtoZWFkZXJ9KQogICAgICAgIGVsc2UgewogICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzW1dSSVRFRU5UUlldID0gbmV3IEVudHJ5KGhlYWRlciwgdGhpc1tFWF0sIHRoaXNbR0VYXSkKCiAgICAgICAgICAvLyB3ZSBkbyB0aGlzIGZvciBtZXRhICYgaWdub3JlZCBlbnRyaWVzIGFzIHdlbGwsIGJlY2F1c2UgdGhleQogICAgICAgICAgLy8gYXJlIHN0aWxsIHZhbGlkIHRhciwgb3IgZWxzZSB3ZSB3b3VsZG4ndCBrbm93IHRvIGlnbm9yZSB0aGVtCiAgICAgICAgICBpZiAoIXRoaXNbU0FXX1ZBTElEX0VOVFJZXSkgewogICAgICAgICAgICBpZiAoZW50cnkucmVtYWluKSB7CiAgICAgICAgICAgICAgLy8gdGhpcyBtaWdodCBiZSB0aGUgb25lIQogICAgICAgICAgICAgIGNvbnN0IG9uZW5kID0gKCkgPT4gewogICAgICAgICAgICAgICAgaWYgKCFlbnRyeS5pbnZhbGlkKQogICAgICAgICAgICAgICAgICB0aGlzW1NBV19WQUxJRF9FTlRSWV0gPSB0cnVlCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVudHJ5Lm9uKCdlbmQnLCBvbmVuZCkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzW1NBV19WQUxJRF9FTlRSWV0gPSB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoZW50cnkubWV0YSkgewogICAgICAgICAgICBpZiAoZW50cnkuc2l6ZSA+IHRoaXMubWF4TWV0YUVudHJ5U2l6ZSkgewogICAgICAgICAgICAgIGVudHJ5Lmlnbm9yZSA9IHRydWUKICAgICAgICAgICAgICB0aGlzW0VNSVRdKCdpZ25vcmVkRW50cnknLCBlbnRyeSkKICAgICAgICAgICAgICB0aGlzW1NUQVRFXSA9ICdpZ25vcmUnCiAgICAgICAgICAgICAgZW50cnkucmVzdW1lKCkKICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5zaXplID4gMCkgewogICAgICAgICAgICAgIHRoaXNbTUVUQV0gPSAnJwogICAgICAgICAgICAgIGVudHJ5Lm9uKCdkYXRhJywgYyA9PiB0aGlzW01FVEFdICs9IGMpCiAgICAgICAgICAgICAgdGhpc1tTVEFURV0gPSAnbWV0YScKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpc1tFWF0gPSBudWxsCiAgICAgICAgICAgIGVudHJ5Lmlnbm9yZSA9IGVudHJ5Lmlnbm9yZSB8fCAhdGhpcy5maWx0ZXIoZW50cnkucGF0aCwgZW50cnkpCgogICAgICAgICAgICBpZiAoZW50cnkuaWdub3JlKSB7CiAgICAgICAgICAgICAgLy8gcHJvYmFibHkgdmFsaWQsIGp1c3Qgbm90IHNvbWV0aGluZyB3ZSBjYXJlIGFib3V0CiAgICAgICAgICAgICAgdGhpc1tFTUlUXSgnaWdub3JlZEVudHJ5JywgZW50cnkpCiAgICAgICAgICAgICAgdGhpc1tTVEFURV0gPSBlbnRyeS5yZW1haW4gPyAnaWdub3JlJyA6ICdoZWFkZXInCiAgICAgICAgICAgICAgZW50cnkucmVzdW1lKCkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoZW50cnkucmVtYWluKQogICAgICAgICAgICAgICAgdGhpc1tTVEFURV0gPSAnYm9keScKICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXNbU1RBVEVdID0gJ2hlYWRlcicKICAgICAgICAgICAgICAgIGVudHJ5LmVuZCgpCiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBpZiAoIXRoaXNbUkVBREVOVFJZXSkgewogICAgICAgICAgICAgICAgdGhpc1tRVUVVRV0ucHVzaChlbnRyeSkKICAgICAgICAgICAgICAgIHRoaXNbTkVYVEVOVFJZXSgpCiAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICB0aGlzW1FVRVVFXS5wdXNoKGVudHJ5KQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBbUFJPQ0VTU0VOVFJZXSAoZW50cnkpIHsKICAgIGxldCBnbyA9IHRydWUKCiAgICBpZiAoIWVudHJ5KSB7CiAgICAgIHRoaXNbUkVBREVOVFJZXSA9IG51bGwKICAgICAgZ28gPSBmYWxzZQogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkKICAgICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGVudHJ5KQogICAgZWxzZSB7CiAgICAgIHRoaXNbUkVBREVOVFJZXSA9IGVudHJ5CiAgICAgIHRoaXMuZW1pdCgnZW50cnknLCBlbnRyeSkKICAgICAgaWYgKCFlbnRyeS5lbWl0dGVkRW5kKSB7CiAgICAgICAgZW50cnkub24oJ2VuZCcsIF8gPT4gdGhpc1tORVhURU5UUlldKCkpCiAgICAgICAgZ28gPSBmYWxzZQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGdvCiAgfQoKICBbTkVYVEVOVFJZXSAoKSB7CiAgICBkbyB7fSB3aGlsZSAodGhpc1tQUk9DRVNTRU5UUlldKHRoaXNbUVVFVUVdLnNoaWZ0KCkpKQoKICAgIGlmICghdGhpc1tRVUVVRV0ubGVuZ3RoKSB7CiAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgcXVldWUsIGJ1dCB3ZSBtYXkgaGF2ZSBhbgogICAgICAvLyBlbnRyeSB3aGljaCBpcyBiZWluZyBjb25zdW1lZCAocmVhZEVudHJ5KS4KICAgICAgLy8gSWYgd2UgZG9uJ3QsIHRoZW4gd2UgZGVmaW5pdGVseSBjYW4gaGFuZGxlIG1vcmUgZGF0YS4KICAgICAgLy8gSWYgd2UgZG8sIGFuZCBlaXRoZXIgaXQncyBmbG93aW5nLCBvciBpdCBoYXMgbmV2ZXIgaGFkIGFueSBkYXRhCiAgICAgIC8vIHdyaXR0ZW4gdG8gaXQsIHRoZW4gaXQgbmVlZHMgbW9yZS4KICAgICAgLy8gVGhlIG9ubHkgb3RoZXIgcG9zc2liaWxpdHkgaXMgdGhhdCBpdCBoYXMgcmV0dXJuZWQgZmFsc2UgZnJvbSBhCiAgICAgIC8vIHdyaXRlKCkgY2FsbCwgc28gd2Ugd2FpdCBmb3IgdGhlIG5leHQgZHJhaW4gdG8gY29udGludWUuCiAgICAgIGNvbnN0IHJlID0gdGhpc1tSRUFERU5UUlldCiAgICAgIGNvbnN0IGRyYWluTm93ID0gIXJlIHx8IHJlLmZsb3dpbmcgfHwgcmUuc2l6ZSA9PT0gcmUucmVtYWluCiAgICAgIGlmIChkcmFpbk5vdykgewogICAgICAgIGlmICghdGhpc1tXUklUSU5HXSkKICAgICAgICAgIHRoaXMuZW1pdCgnZHJhaW4nKQogICAgICB9IGVsc2UKICAgICAgICByZS5vbmNlKCdkcmFpbicsIF8gPT4gdGhpcy5lbWl0KCdkcmFpbicpKQogICAgIH0KICB9CgogIFtDT05TVU1FQk9EWV0gKGNodW5rLCBwb3NpdGlvbikgewogICAgLy8gd3JpdGUgdXAgdG8gYnV0IG5vICBtb3JlIHRoYW4gd3JpdGVFbnRyeS5ibG9ja1JlbWFpbgogICAgY29uc3QgZW50cnkgPSB0aGlzW1dSSVRFRU5UUlldCiAgICBjb25zdCBiciA9IGVudHJ5LmJsb2NrUmVtYWluCiAgICBjb25zdCBjID0gKGJyID49IGNodW5rLmxlbmd0aCAmJiBwb3NpdGlvbiA9PT0gMCkgPyBjaHVuawogICAgICA6IGNodW5rLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIGJyKQoKICAgIGVudHJ5LndyaXRlKGMpCgogICAgaWYgKCFlbnRyeS5ibG9ja1JlbWFpbikgewogICAgICB0aGlzW1NUQVRFXSA9ICdoZWFkZXInCiAgICAgIHRoaXNbV1JJVEVFTlRSWV0gPSBudWxsCiAgICAgIGVudHJ5LmVuZCgpCiAgICB9CgogICAgcmV0dXJuIGMubGVuZ3RoCiAgfQoKICBbQ09OU1VNRU1FVEFdIChjaHVuaywgcG9zaXRpb24pIHsKICAgIGNvbnN0IGVudHJ5ID0gdGhpc1tXUklURUVOVFJZXQogICAgY29uc3QgcmV0ID0gdGhpc1tDT05TVU1FQk9EWV0oY2h1bmssIHBvc2l0aW9uKQoKICAgIC8vIGlmIHdlIGZpbmlzaGVkLCB0aGVuIHRoZSBlbnRyeSBpcyByZXNldAogICAgaWYgKCF0aGlzW1dSSVRFRU5UUlldKQogICAgICB0aGlzW0VNSVRNRVRBXShlbnRyeSkKCiAgICByZXR1cm4gcmV0CiAgfQoKICBbRU1JVF0gKGV2LCBkYXRhLCBleHRyYSkgewogICAgaWYgKCF0aGlzW1FVRVVFXS5sZW5ndGggJiYgIXRoaXNbUkVBREVOVFJZXSkKICAgICAgdGhpcy5lbWl0KGV2LCBkYXRhLCBleHRyYSkKICAgIGVsc2UKICAgICAgdGhpc1tRVUVVRV0ucHVzaChbZXYsIGRhdGEsIGV4dHJhXSkKICB9CgogIFtFTUlUTUVUQV0gKGVudHJ5KSB7CiAgICB0aGlzW0VNSVRdKCdtZXRhJywgdGhpc1tNRVRBXSkKICAgIHN3aXRjaCAoZW50cnkudHlwZSkgewogICAgICBjYXNlICdFeHRlbmRlZEhlYWRlcic6CiAgICAgIGNhc2UgJ09sZEV4dGVuZGVkSGVhZGVyJzoKICAgICAgICB0aGlzW0VYXSA9IFBheC5wYXJzZSh0aGlzW01FVEFdLCB0aGlzW0VYXSwgZmFsc2UpCiAgICAgICAgYnJlYWsKCiAgICAgIGNhc2UgJ0dsb2JhbEV4dGVuZGVkSGVhZGVyJzoKICAgICAgICB0aGlzW0dFWF0gPSBQYXgucGFyc2UodGhpc1tNRVRBXSwgdGhpc1tHRVhdLCB0cnVlKQogICAgICAgIGJyZWFrCgogICAgICBjYXNlICdOZXh0RmlsZUhhc0xvbmdQYXRoJzoKICAgICAgY2FzZSAnT2xkR251TG9uZ1BhdGgnOgogICAgICAgIHRoaXNbRVhdID0gdGhpc1tFWF0gfHwgT2JqZWN0LmNyZWF0ZShudWxsKQogICAgICAgIHRoaXNbRVhdLnBhdGggPSB0aGlzW01FVEFdLnJlcGxhY2UoL1wwLiovLCAnJykKICAgICAgICBicmVhawoKICAgICAgY2FzZSAnTmV4dEZpbGVIYXNMb25nTGlua3BhdGgnOgogICAgICAgIHRoaXNbRVhdID0gdGhpc1tFWF0gfHwgT2JqZWN0LmNyZWF0ZShudWxsKQogICAgICAgIHRoaXNbRVhdLmxpbmtwYXRoID0gdGhpc1tNRVRBXS5yZXBsYWNlKC9cMC4qLywgJycpCiAgICAgICAgYnJlYWsKCiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCiAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcigndW5rbm93biBtZXRhOiAnICsgZW50cnkudHlwZSkKICAgIH0KICB9CgogIGFib3J0IChlcnJvcikgewogICAgdGhpc1tBQk9SVEVEXSA9IHRydWUKICAgIHRoaXMuZW1pdCgnYWJvcnQnLCBlcnJvcikKICAgIC8vIGFsd2F5cyB0aHJvd3MsIGV2ZW4gaW4gbm9uLXN0cmljdCBtb2RlCiAgICB0aGlzLndhcm4oJ1RBUl9BQk9SVCcsIGVycm9yLCB7IHJlY292ZXJhYmxlOiBmYWxzZSB9KQogIH0KCiAgd3JpdGUgKGNodW5rKSB7CiAgICBpZiAodGhpc1tBQk9SVEVEXSkKICAgICAgcmV0dXJuCgogICAgLy8gZmlyc3Qgd3JpdGUsIG1pZ2h0IGJlIGd6aXBwZWQKICAgIGlmICh0aGlzW1VOWklQXSA9PT0gbnVsbCAmJiBjaHVuaykgewogICAgICBpZiAodGhpc1tCVUZGRVJdKSB7CiAgICAgICAgY2h1bmsgPSBCdWZmZXIuY29uY2F0KFt0aGlzW0JVRkZFUl0sIGNodW5rXSkKICAgICAgICB0aGlzW0JVRkZFUl0gPSBudWxsCiAgICAgIH0KICAgICAgaWYgKGNodW5rLmxlbmd0aCA8IGd6aXBIZWFkZXIubGVuZ3RoKSB7CiAgICAgICAgdGhpc1tCVUZGRVJdID0gY2h1bmsKICAgICAgICByZXR1cm4gdHJ1ZQogICAgICB9CiAgICAgIGZvciAobGV0IGkgPSAwOyB0aGlzW1VOWklQXSA9PT0gbnVsbCAmJiBpIDwgZ3ppcEhlYWRlci5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjaHVua1tpXSAhPT0gZ3ppcEhlYWRlcltpXSkKICAgICAgICAgIHRoaXNbVU5aSVBdID0gZmFsc2UKICAgICAgfQogICAgICBpZiAodGhpc1tVTlpJUF0gPT09IG51bGwpIHsKICAgICAgICBjb25zdCBlbmRlZCA9IHRoaXNbRU5ERURdCiAgICAgICAgdGhpc1tFTkRFRF0gPSBmYWxzZQogICAgICAgIHRoaXNbVU5aSVBdID0gbmV3IHpsaWIuVW56aXAoKQogICAgICAgIHRoaXNbVU5aSVBdLm9uKCdkYXRhJywgY2h1bmsgPT4gdGhpc1tDT05TVU1FQ0hVTktdKGNodW5rKSkKICAgICAgICB0aGlzW1VOWklQXS5vbignZXJyb3InLCBlciA9PiB0aGlzLmFib3J0KGVyKSkKICAgICAgICB0aGlzW1VOWklQXS5vbignZW5kJywgXyA9PiB7CiAgICAgICAgICB0aGlzW0VOREVEXSA9IHRydWUKICAgICAgICAgIHRoaXNbQ09OU1VNRUNIVU5LXSgpCiAgICAgICAgfSkKICAgICAgICB0aGlzW1dSSVRJTkddID0gdHJ1ZQogICAgICAgIGNvbnN0IHJldCA9IHRoaXNbVU5aSVBdW2VuZGVkID8gJ2VuZCcgOiAnd3JpdGUnIF0oY2h1bmspCiAgICAgICAgdGhpc1tXUklUSU5HXSA9IGZhbHNlCiAgICAgICAgcmV0dXJuIHJldAogICAgICB9CiAgICB9CgogICAgdGhpc1tXUklUSU5HXSA9IHRydWUKICAgIGlmICh0aGlzW1VOWklQXSkKICAgICAgdGhpc1tVTlpJUF0ud3JpdGUoY2h1bmspCiAgICBlbHNlCiAgICAgIHRoaXNbQ09OU1VNRUNIVU5LXShjaHVuaykKICAgIHRoaXNbV1JJVElOR10gPSBmYWxzZQoKICAgIC8vIHJldHVybiBmYWxzZSBpZiB0aGVyZSdzIGEgcXVldWUsIG9yIGlmIHRoZSBjdXJyZW50IGVudHJ5IGlzbid0IGZsb3dpbmcKICAgIGNvbnN0IHJldCA9CiAgICAgIHRoaXNbUVVFVUVdLmxlbmd0aCA/IGZhbHNlIDoKICAgICAgdGhpc1tSRUFERU5UUlldID8gdGhpc1tSRUFERU5UUlldLmZsb3dpbmcgOgogICAgICB0cnVlCgogICAgLy8gaWYgd2UgaGF2ZSBubyBxdWV1ZSwgdGhlbiB0aGF0IG1lYW5zIGEgY2xvZ2dlZCBSRUFERU5UUlkKICAgIGlmICghcmV0ICYmICF0aGlzW1FVRVVFXS5sZW5ndGgpCiAgICAgIHRoaXNbUkVBREVOVFJZXS5vbmNlKCdkcmFpbicsIF8gPT4gdGhpcy5lbWl0KCdkcmFpbicpKQoKICAgIHJldHVybiByZXQKICB9CgogIFtCVUZGRVJDT05DQVRdIChjKSB7CiAgICBpZiAoYyAmJiAhdGhpc1tBQk9SVEVEXSkKICAgICAgdGhpc1tCVUZGRVJdID0gdGhpc1tCVUZGRVJdID8gQnVmZmVyLmNvbmNhdChbdGhpc1tCVUZGRVJdLCBjXSkgOiBjCiAgfQoKICBbTUFZQkVFTkRdICgpIHsKICAgIGlmICh0aGlzW0VOREVEXSAmJgogICAgICAgICF0aGlzW0VNSVRURURFTkRdICYmCiAgICAgICAgIXRoaXNbQUJPUlRFRF0gJiYKICAgICAgICAhdGhpc1tDT05TVU1JTkddKSB7CiAgICAgIHRoaXNbRU1JVFRFREVORF0gPSB0cnVlCiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpc1tXUklURUVOVFJZXQogICAgICBpZiAoZW50cnkgJiYgZW50cnkuYmxvY2tSZW1haW4pIHsKICAgICAgICAvLyB0cnVuY2F0ZWQsIGxpa2VseSBhIGRhbWFnZWQgZmlsZQogICAgICAgIGNvbnN0IGhhdmUgPSB0aGlzW0JVRkZFUl0gPyB0aGlzW0JVRkZFUl0ubGVuZ3RoIDogMAogICAgICAgIHRoaXMud2FybignVEFSX0JBRF9BUkNISVZFJywgYFRydW5jYXRlZCBpbnB1dCAobmVlZGVkICR7CiAgICAgICAgICBlbnRyeS5ibG9ja1JlbWFpbn0gbW9yZSBieXRlcywgb25seSAke2hhdmV9IGF2YWlsYWJsZSlgLCB7ZW50cnl9KQogICAgICAgIGlmICh0aGlzW0JVRkZFUl0pCiAgICAgICAgICBlbnRyeS53cml0ZSh0aGlzW0JVRkZFUl0pCiAgICAgICAgZW50cnkuZW5kKCkKICAgICAgfQogICAgICB0aGlzW0VNSVRdKERPTkUpCiAgICB9CiAgfQoKICBbQ09OU1VNRUNIVU5LXSAoY2h1bmspIHsKICAgIGlmICh0aGlzW0NPTlNVTUlOR10pCiAgICAgIHRoaXNbQlVGRkVSQ09OQ0FUXShjaHVuaykKICAgIGVsc2UgaWYgKCFjaHVuayAmJiAhdGhpc1tCVUZGRVJdKQogICAgICB0aGlzW01BWUJFRU5EXSgpCiAgICBlbHNlIHsKICAgICAgdGhpc1tDT05TVU1JTkddID0gdHJ1ZQogICAgICBpZiAodGhpc1tCVUZGRVJdKSB7CiAgICAgICAgdGhpc1tCVUZGRVJDT05DQVRdKGNodW5rKQogICAgICAgIGNvbnN0IGMgPSB0aGlzW0JVRkZFUl0KICAgICAgICB0aGlzW0JVRkZFUl0gPSBudWxsCiAgICAgICAgdGhpc1tDT05TVU1FQ0hVTktTVUJdKGMpCiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpc1tDT05TVU1FQ0hVTktTVUJdKGNodW5rKQogICAgICB9CgogICAgICB3aGlsZSAodGhpc1tCVUZGRVJdICYmCiAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID49IDUxMiAmJgogICAgICAgICAgIXRoaXNbQUJPUlRFRF0gJiYKICAgICAgICAgICF0aGlzW1NBV19FT0ZdKSB7CiAgICAgICAgY29uc3QgYyA9IHRoaXNbQlVGRkVSXQogICAgICAgIHRoaXNbQlVGRkVSXSA9IG51bGwKICAgICAgICB0aGlzW0NPTlNVTUVDSFVOS1NVQl0oYykKICAgICAgfQogICAgICB0aGlzW0NPTlNVTUlOR10gPSBmYWxzZQogICAgfQoKICAgIGlmICghdGhpc1tCVUZGRVJdIHx8IHRoaXNbRU5ERURdKQogICAgICB0aGlzW01BWUJFRU5EXSgpCiAgfQoKICBbQ09OU1VNRUNIVU5LU1VCXSAoY2h1bmspIHsKICAgIC8vIHdlIGtub3cgdGhhdCB3ZSBhcmUgaW4gQ09OU1VNSU5HIG1vZGUsIHNvIGFueXRoaW5nIHdyaXR0ZW4gZ29lcyBpbnRvCiAgICAvLyB0aGUgYnVmZmVyLiAgQWR2YW5jZSB0aGUgcG9zaXRpb24gYW5kIHB1dCBhbnkgcmVtYWluZGVyIGluIHRoZSBidWZmZXIuCiAgICBsZXQgcG9zaXRpb24gPSAwCiAgICBsZXQgbGVuZ3RoID0gY2h1bmsubGVuZ3RoCiAgICB3aGlsZSAocG9zaXRpb24gKyA1MTIgPD0gbGVuZ3RoICYmICF0aGlzW0FCT1JURURdICYmICF0aGlzW1NBV19FT0ZdKSB7CiAgICAgIHN3aXRjaCAodGhpc1tTVEFURV0pIHsKICAgICAgICBjYXNlICdiZWdpbic6CiAgICAgICAgY2FzZSAnaGVhZGVyJzoKICAgICAgICAgIHRoaXNbQ09OU1VNRUhFQURFUl0oY2h1bmssIHBvc2l0aW9uKQogICAgICAgICAgcG9zaXRpb24gKz0gNTEyCiAgICAgICAgICBicmVhawoKICAgICAgICBjYXNlICdpZ25vcmUnOgogICAgICAgIGNhc2UgJ2JvZHknOgogICAgICAgICAgcG9zaXRpb24gKz0gdGhpc1tDT05TVU1FQk9EWV0oY2h1bmssIHBvc2l0aW9uKQogICAgICAgICAgYnJlYWsKCiAgICAgICAgY2FzZSAnbWV0YSc6CiAgICAgICAgICBwb3NpdGlvbiArPSB0aGlzW0NPTlNVTUVNRVRBXShjaHVuaywgcG9zaXRpb24pCiAgICAgICAgICBicmVhawoKICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3RhdGU6ICcgKyB0aGlzW1NUQVRFXSkKICAgICAgfQogICAgfQoKICAgIGlmIChwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICBpZiAodGhpc1tCVUZGRVJdKQogICAgICAgIHRoaXNbQlVGRkVSXSA9IEJ1ZmZlci5jb25jYXQoW2NodW5rLnNsaWNlKHBvc2l0aW9uKSwgdGhpc1tCVUZGRVJdXSkKICAgICAgZWxzZQogICAgICAgIHRoaXNbQlVGRkVSXSA9IGNodW5rLnNsaWNlKHBvc2l0aW9uKQogICAgfQogIH0KCiAgZW5kIChjaHVuaykgewogICAgaWYgKCF0aGlzW0FCT1JURURdKSB7CiAgICAgIGlmICh0aGlzW1VOWklQXSkKICAgICAgICB0aGlzW1VOWklQXS5lbmQoY2h1bmspCiAgICAgIGVsc2UgewogICAgICAgIHRoaXNbRU5ERURdID0gdHJ1ZQogICAgICAgIHRoaXMud3JpdGUoY2h1bmspCiAgICAgIH0KICAgIH0KICB9Cn0pCg== |
| 1 | { |
| 2 | "ActionError": { |
| 3 | "kind": { |
| 4 | "FunctionCallError": { |
| 5 | "MethodResolveError": "MethodNotFound" |
| 6 | } |
| 7 | }, |
| 8 | "index": 0 |
| 9 | } |
| 10 | } |
| 1 | |
| 1 | { |
| 2 | "deposit": "21484331261936000000000" |
| 3 | } |
Empty Result
| 1 | |