IyBTcGFtQXNzYXNzaW4gcnVsZXMgZmlsZTogYWR2YW5jZSBmZWUgZnJhdWQgcnVsZXMgKE5pZ2VyaWFuIDQxOSBzY2FtcykKIwojIFBsZWFzZSBkb24ndCBtb2RpZnkgdGhpcyBmaWxlIGFzIHlvdXIgY2hhbmdlcyB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGgKIyB0aGUgbmV4dCB1cGRhdGUuIFVzZSBAQExPQ0FMX1JVTEVTX0RJUkBAL2xvY2FsLmNmIGluc3RlYWQuCiMgU2VlICdwZXJsZG9jIE1haWw6OlNwYW1Bc3Nhc3Npbjo6Q29uZicgZm9yIGRldGFpbHMuCiMKIyA8QExJQ0VOU0U+CiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKIyAKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMgCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojIDwvQExJQ0VOU0U+CiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpyZXF1aXJlX3ZlcnNpb24gQEBWRVJTSU9OQEAKCiMgcHJlZGljYXRlIG5hbWluZyB1c2VkIHRvIGF2b2lkIHJlbnVtYmVyaW5nCiMgMS4gYXNzaWduIG5ldyBydWxlcyBhIHJhbmRvbSB1bmlxdWUgdGhyZWUgbGV0dGVyIHNlcXVlbmNlCiMgMi4gc29ydCBvbiBydWxlIGRlZmluaXRpb24sIG5vdCBydWxlIG5hbWUKCmhlYWRlciBfX0ZSQVVEX1ZRRQlTdWJqZWN0ID1+IC9eKD86UmU6fFxbLnsxLDEwfVxdKT9ccyooPzp2ZXJ5ICk/dXJnZW50XHMrKD86KD86YW5kfCYpXHMrKT8oPzpjb25maWRlbnRpYWx8YXNzaXN0YW5jZXxidXNpbmVzc3xhdHRlbnRpb258cmVwbHl8cmVzcG9uc2V8aGVscClcYi9pCgpib2R5IF9fRlJBVURfREJJCS8oPzpcYmRvbGxhcnM/XGJ8XGJ1c2QoPzpvbGxhcnMpPyg/OlswLTldfFxiKXxcYnVzXCR8XCRbMC05LC5dezYsfXxcJFswLTldLnswLDh9W21iXWlsbGlvbnxcJFswLTkuLF17MiwxMH0gP218XGJldXJvcz9cYnx1Wy5dP3NbLl0/IFswLTkuXSsgbSkvaQpib2R5IF9fRlJBVURfS0pWCS8oPzpjbGFpbXxjb25jZXJuaW5nKSAoPzp0aGV8dGhpcykgbW9uZXkvaQpib2R5IF9fRlJBVURfSVJKCS8oPzpmaW5hbmNlfGhvbGRpbmd8c2VjdXJpdCg/Omllc3x5KSkgKD86Y29tcGFueXxmaXJtfHN0b3JhZ2UgaG91c2UpL2kKYm9keSBfX0ZSQVVEX05FQgkvKD86Z292ZXJubWVudHxiYW5rKSBvZiBuaWdlcmlhL2kKYm9keSBfX0ZSQVVEX1hKUgkvKD86d2hvIHdhcyBhfGFzIGF8YW4/IGhvbmVzdHx5b3UgYmVpbmcgYXx0byBhbnkpIGZvcmVpZ25lci9pCmJvZHkgX19GUkFVRF9EUFIJL1xiKD86KD86cmVzcG9uZHxyZXBseSkgKD86dXJnZW50bHl8aW1tZWRpYXRlbHkpfCg/OnVyZ2VudHxpbW1lZGlhdGV8ZWFybGllc3QpICg/OnJlcGx5fHJlc3BvbnNlKSlcYi9pCmJvZHkgX19GUkFVRF9QVFMJL1xiKD86YXNzP2Fzcz9pbmF0KD86ZWR8aW9uKXxtdXJkZXIoPzplP2QpP3xraWxsKD86ZWR8aW5nKVxiW14uXXswLDk5fVxiKD86d2FyIHZldGVyYW5zfHJlYmVscz8pKVxiL2kKYm9keSBfX0ZSQVVEX0JFUAkvXGIoPzpiYW5rIG9mIG5pZ2VyaWF8Y2VudHJhbCBiYW5rIG9mfHRydXN0IGJhbmt8YXBleCBiYW5rfGFtYWxnYW1hdGVkIGJhbmspXGIvaQpib2R5IF9fRlJBVURfVERQCS9cYig/OmJ1c2luZXNzIHBhcnRuZXIoPzpzfHNoaXApP3xzaWxlbnQgcGFydG5lcig/OnN8c2hpcCk/KVxiL2kKYm9keSBfX0ZSQVVEX0dBTgkvXGIoPzpjaGFybGVzIHRheWxvcnxzZXJlbmF8YWJhY2hhfGd1W2Xp6F1pfHNlc2VbLSBdP3Nla298a2FiaWxhKVxiL2kKYm9keSBfX0ZSQVVEX0lSVAkvXGIoPzpjb21wbGltZW50cz8gb2YgdGhlfGRlYXIgZnJpZW5kfGRlYXIgc2lyfHlvdXJzIGZhaXRoZnVsbHl8c2Vhc29uJz9zIGdyZWV0aW5ncylcYi9pCmJvZHkgX19GUkFVRF9BT04JL1xiKD86Y29uZmlkZW50aWFsfHByaXZhdGV8YWx0ZXJuYXRlfGFsdGVybmF0aXZlKSAoPzooPzplLT8gKik/bWFpbClcYi9pCmJvZHkgX19GUkFVRF9XTlkJL1xiKD86ZGlzYnVyc2U/KD86bWVudCk/fGluY3Vycj8oPzplZCk/fHJlbXVuZXJyP2F0KD86ZWQ/fGlvbil8cmVtbT9pdHQ/KD86ZWR8YW5jZXxpbmcpPylcYi9pCmJvZHkgX19GUkFVRF9JUEsJL1xiKD86aW58dG98dmlzaXQpIHlvdXIgY291bnRyeVxiL2kKYm9keSBfX0ZSQVVEX1FYWAkvXGIoPzpteSBuYW1lIGlzfGkgYW0pICg/Om1ycz98ZW5ncnxiYXJyaXN0ZXJ8ZHJ8cHJpbmNlKD86c3MpPylbLiBdL2kKYm9keSBfX0ZSQVVEX0lPVQkvXGIoPzpubyByaXNrcz98cmlzay0/ICpmcmVlfGZyZWUgb2Ygcmlza3M/fDEwMCUgc2FmZSlcYi9pCmJvZHkgX19GUkFVRF9FWlkJL1xiKD86b2Z8dGhlKSBsYXRlIHByZXNpZGVudFxiL2kKYm9keSBfX0ZSQVVEX01MWQkvXGIoPzpyZXBseXxyZXNwb25kKVxiW14uXXswLDUwfVxiKD86dG98dGhyb3VnaClcYlteLl17MCw1MH1cQFxiL2kKYm9keSBfX0ZSQVVEX1pGSgkvXGIoPzp3aWZlfHNvbnxicm90aGVyfGRhdWdodGVyKSBvZiB0aGUgbGF0ZVxiL2kKYm9keSBfX0ZSQVVEX0tEVAkvXGJVXC4/U1wuPyg/OkRcLj8pP1xzKig/OlwkXHMqKT8oPzpcZCssXGQrLFxkK3xcZCtcLlxkK1wuXGQrfFxkKyg/OlwuXGQrKT9ccyptaWxsaT9vbikvaQpib2R5IF9fRlJBVURfVUxLCS9cYmFmZmlkYXZpdHM/XGIvaQpib2R5IF9fRlJBVURfQkdQCS9cYmF0dGFjaGVkIHRvIHRpY2tldCBudW1iZXJcYi9pCmJvZHkgX19GUkFVRF9GQkkJL1xiZGlzYnVycy9pCmJvZHkgX19GUkFVRF9KQlUJL1xiZm9yZWlnbiBhY2NvdW50XGIvaQpib2R5IF9fRlJBVURfWVdXCS9cYmZ1cm5pc2ggeW91IHdpdGhcYi9pCmJvZHkgX19GUkFVRF9KWUcJL1xiZ2l2ZVxzK3lvdSAuezAsMTV9KD86ZnVuZHxtb25leXx0b3RhbHxzdW18Y29udGFjdHxwZXJjZW50KVxiL2kKYm9keSBfX0ZSQVVEX1hWVwkvXGJob25lc3QgY29vcGVyYXRpb25cYi9pCmJvZHkgX19GUkFVRF9VVVkJL1xibGVnaXRpbWF0ZSBidXNpbmVzcyg/OmVzKT9cYi9pCmJvZHkgX19GUkFVRF9TTlQJL1xibG9jYXRlKD86IC57MSwyMH0pPyBleHRlbmRlZCByZWxhdGl2ZS9pCmJvZHkgX19GUkFVRF9MVFgJL1xibWlsbGk/b24gKD86LnsxLDI1fSB0aG91c2FuZFxzKik/KD86KD86dW5pdGVkIHN0YXRlc3x1XC4/c1wuPykgZG9sbGFyc3woP2k6VVwuP1NcLj9EPykpXGIvaQpib2R5IF9fRlJBVURfSk5CCS9cYm9wZXJhdCg/OmV8aW5nKVxiW14uXXswLDk5fVxiKD86Zm9yKD86ZWl8aWUpZ258b2ZmLT8gP3Nob3JlfG92ZXItPyA/c2Vhcz8pICg/OmJhbmsgKT9hY2NvdW50cz9cYi9pCmJvZHkgX19GUkFVRF9RRlkJL1xib3Zlci0/ICooPzppbnZvaWNlZD98Y29zdCg/OnN8aW5nKT8pXGIvaQpib2R5IF9fRlJBVURfV0RSCS9cYnByaXZhdGUgbGF3eWVyXGIvaQpib2R5IF9fRlJBVURfV0ZDCS9cYnNlY3VyKD86ZXxpbmcpICg/OnRoZSApPyg/OmZ1bmRzP3xtb25pZXMpXGIvaQpib2R5IF9fRlJBVURfQVVNCS9cYnRoZSBkZXNrIG9mXGIvaQpib2R5IF9fRlJBVURfTUNRCS9cYnRyYW5zYWN0aW9uXGIuezEsMzB9XGIoPzptYWduaXR1ZGV8ZGlwbG9tYXRpY3xzdHJpY3R8YWJzb2x1dGV8c2VjcmV0fGNvbmZpZGVuKD86dGlhbHxjZSl8Z3VhcmFudGVlKS9pCmJvZHkgX19GUkFVRF9FVFgJL1xieW91clxiW14uXXswLDk5fVxiKD86Y29udGFjdCAoPzpkZXRhaWxzfGluZm9ybWF0aW9uKXxwcml2YXRlICg/OmU/Wy0gXT9tYWlsfHRlbGVwaG9uZXx0ZWx8cGhvbmV8ZmF4KSlcYi9pCmJvZHkgX19GUkFVRF9QVk4JL2FzIHRoZSBiZW5lZmljaWFyeS9pCmJvZHkgX19GUkFVRF9GVlUJL2F3YXJkIG5vdGlmaWNhdGlvbi9pCmJvZHkgX19GUkFVRF9DS0YJL2NvbXB1dGVyIGJhbGxvdCBzeXN0ZW0vaQpib2R5IF9fRlJBVURfRkNXCS9maWR1Y2lhcnkgYWdlbnQvaQpib2R5IF9fRlJBVURfTVFPCS9mb3JlaWduICg/OmJ1c2luZXNzIHBhcnRuZXJ8Y3VzdG9tZXIpL2kKYm9keSBfX0ZSQVVEX1RDQwkvZm9yZWlnbiAoPzpvZmZzaG9yZSApPyg/OmJhbmt8YWNjb3VudCkvaQpib2R5IF9fRlJBVURfR0JXCS9nb2QgZ2l2ZXMgLnsxLDEwfXNlY29uZCBjaGFuY2UvaQpib2R5IF9fRlJBVURfTlJHCS9pIGFtIGNvbnRhY3RpbmcgeW91L2kKYm9keSBfX0ZSQVVEX1JMWAkvbG90dCg/Om98ZXJ5KSAoPzpjbyw/b3JkaW5hdG9yfGludGVybmF0aW9uYWwpL2kKYm9keSBfX0ZSQVVEX0FYRgkvbWFnbmFuaW1pdHkvaQpib2R5IF9fRlJBVURfVEhKCS9tb2RhbGl0KD86eXxpZXMpL2kKYm9keSBfX0ZSQVVEX1lRVgkvbmlnZXJpYW4/ICg/Om5hdGlvbmFsfGdvdmVybm1lbnQpL2kKYm9keSBfX0ZSQVVEX1lKQQkvb3Zlci1pbnZvaWNlL2kKYm9keSBfX0ZSQVVEX1lQTwkvdGhlIHRvdGFsIHN1bS9pCmJvZHkgX19GUkFVRF9VT1EJL3ZpdGFsIGRvY3VtZW50cy9pCgojCiMgamhhcmRpbjogdGVtcG9yYXJpbHkgZGlzYWJsZSB0byBnYXVnZSBhbmQgc2NvcmUgQURWQU5DRV9GRUVfTkVXIHJ1bGVzIGluIGlzb2xhdGlvbgojCiMgbWV0YSBBRFZBTkNFX0ZFRV8yIChfX0ZSQVVEX0tKViArIF9fRlJBVURfSVJKICsgX19GUkFVRF9ORUIgKyBfX0ZSQVVEX1hKUiArIF9fRlJBVURfRVpZICsgX19GUkFVRF9aRkogKyBfX0ZSQVVEX0tEVCArIF9fRlJBVURfQkdQICsgX19GUkFVRF9GQkkgKyBfX0ZSQVVEX0pCVSArIF9fRlJBVURfSllHICsgX19GUkFVRF9YVlcgKyBfX0ZSQVVEX1NOVCArIF9fRlJBVURfTFRYICsgX19GUkFVRF9NQ1EgKyBfX0ZSQVVEX1BWTiArIF9fRlJBVURfRlZVICsgX19GUkFVRF9DS0YgKyBfX0ZSQVVEX0ZDVyArIF9fRlJBVURfTVFPICsgX19GUkFVRF9UQ0MgKyBfX0ZSQVVEX0dCVyArIF9fRlJBVURfTlJHICsgX19GUkFVRF9STFggKyBfX0ZSQVVEX0FYRiArIF9fRlJBVURfVEhKICsgX19GUkFVRF9ZUVYgKyBfX0ZSQVVEX1lKQSArIF9fRlJBVURfWVBPICsgX19GUkFVRF9VT1EgKyBfX0ZSQVVEX0RCSSArIF9fRlJBVURfQkVQICsgX19GUkFVRF9EUFIgKyBfX0ZSQVVEX1FYWCArIF9fRlJBVURfUUZZICsgX19GUkFVRF9QVFMgKyBfX0ZSQVVEX1REUCArIF9fRlJBVURfR0FOICsgX19GUkFVRF9JUEsgKyBfX0ZSQVVEX0FPTiArIF9fRlJBVURfV05ZICsgX19GUkFVRF9BVU0gKyBfX0ZSQVVEX1dGQyArIF9fRlJBVURfWVdXICsgX19GUkFVRF9VTEsgKyBfX0ZSQVVEX0lPVSArIF9fRlJBVURfSk5CICsgX19GUkFVRF9JUlQgKyBfX0ZSQVVEX0VUWCArIF9fRlJBVURfV0RSICsgX19GUkFVRF9VVVkgKyBfX0ZSQVVEX01MWSA+IDIpCiMgbWV0YSBBRFZBTkNFX0ZFRV8zIChfX0ZSQVVEX0tKViArIF9fRlJBVURfSVJKICsgX19GUkFVRF9ORUIgKyBfX0ZSQVVEX1hKUiArIF9fRlJBVURfRVpZICsgX19GUkFVRF9aRkogKyBfX0ZSQVVEX0tEVCArIF9fRlJBVURfQkdQICsgX19GUkFVRF9GQkkgKyBfX0ZSQVVEX0pCVSArIF9fRlJBVURfSllHICsgX19GUkFVRF9YVlcgKyBfX0ZSQVVEX1NOVCArIF9fRlJBVURfTFRYICsgX19GUkFVRF9NQ1EgKyBfX0ZSQVVEX1BWTiArIF9fRlJBVURfRlZVICsgX19GUkFVRF9DS0YgKyBfX0ZSQVVEX0ZDVyArIF9fRlJBVURfTVFPICsgX19GUkFVRF9UQ0MgKyBfX0ZSQVVEX0dCVyArIF9fRlJBVURfTlJHICsgX19GUkFVRF9STFggKyBfX0ZSQVVEX0FYRiArIF9fRlJBVURfVEhKICsgX19GUkFVRF9ZUVYgKyBfX0ZSQVVEX1lKQSArIF9fRlJBVURfWVBPICsgX19GUkFVRF9VT1EgKyBfX0ZSQVVEX0RCSSArIF9fRlJBVURfQkVQICsgX19GUkFVRF9EUFIgKyBfX0ZSQVVEX1FYWCArIF9fRlJBVURfUUZZICsgX19GUkFVRF9QVFMgKyBfX0ZSQVVEX1REUCArIF9fRlJBVURfR0FOICsgX19GUkFVRF9JUEsgKyBfX0ZSQVVEX0FPTiArIF9fRlJBVURfV05ZICsgX19GUkFVRF9BVU0gKyBfX0ZSQVVEX1dGQyArIF9fRlJBVURfWVdXICsgX19GUkFVRF9VTEsgKyBfX0ZSQVVEX0lPVSArIF9fRlJBVURfSk5CICsgX19GUkFVRF9JUlQgKyBfX0ZSQVVEX0VUWCArIF9fRlJBVURfV0RSICsgX19GUkFVRF9VVVkgKyBfX0ZSQVVEX01MWSA+IDMpCiMgbWV0YSBBRFZBTkNFX0ZFRV80IChfX0ZSQVVEX0tKViArIF9fRlJBVURfSVJKICsgX19GUkFVRF9ORUIgKyBfX0ZSQVVEX1hKUiArIF9fRlJBVURfRVpZICsgX19GUkFVRF9aRkogKyBfX0ZSQVVEX0tEVCArIF9fRlJBVURfQkdQICsgX19GUkFVRF9GQkkgKyBfX0ZSQVVEX0pCVSArIF9fRlJBVURfSllHICsgX19GUkFVRF9YVlcgKyBfX0ZSQVVEX1NOVCArIF9fRlJBVURfTFRYICsgX19GUkFVRF9NQ1EgKyBfX0ZSQVVEX1BWTiArIF9fRlJBVURfRlZVICsgX19GUkFVRF9DS0YgKyBfX0ZSQVVEX0ZDVyArIF9fRlJBVURfTVFPICsgX19GUkFVRF9UQ0MgKyBfX0ZSQVVEX0dCVyArIF9fRlJBVURfTlJHICsgX19GUkFVRF9STFggKyBfX0ZSQVVEX0FYRiArIF9fRlJBVURfVEhKICsgX19GUkFVRF9ZUVYgKyBfX0ZSQVVEX1lKQSArIF9fRlJBVURfWVBPICsgX19GUkFVRF9VT1EgKyBfX0ZSQVVEX0RCSSArIF9fRlJBVURfQkVQICsgX19GUkFVRF9EUFIgKyBfX0ZSQVVEX1FYWCArIF9fRlJBVURfUUZZICsgX19GUkFVRF9QVFMgKyBfX0ZSQVVEX1REUCArIF9fRlJBVURfR0FOICsgX19GUkFVRF9JUEsgKyBfX0ZSQVVEX0FPTiArIF9fRlJBVURfV05ZICsgX19GUkFVRF9BVU0gKyBfX0ZSQVVEX1dGQyArIF9fRlJBVURfWVdXICsgX19GUkFVRF9VTEsgKyBfX0ZSQVVEX0lPVSArIF9fRlJBVURfSk5CICsgX19GUkFVRF9JUlQgKyBfX0ZSQVVEX0VUWCArIF9fRlJBVURfV0RSICsgX19GUkFVRF9VVVkgKyBfX0ZSQVVEX01MWSA+IDQpCiMgCiMgZGVzY3JpYmUgQURWQU5DRV9GRUVfMglBcHBlYXJzIHRvIGJlIGFkdmFuY2UgZmVlIGZyYXVkIChOaWdlcmlhbiA0MTkpCiMgZGVzY3JpYmUgQURWQU5DRV9GRUVfMwlBcHBlYXJzIHRvIGJlIGFkdmFuY2UgZmVlIGZyYXVkIChOaWdlcmlhbiA0MTkpCiMgZGVzY3JpYmUgQURWQU5DRV9GRUVfNAlBcHBlYXJzIHRvIGJlIGFkdmFuY2UgZmVlIGZyYXVkIChOaWdlcmlhbiA0MTkpCg==