IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgQXByaWwgMjAxMAojCiMgVGhlIG1vZHVsZSBpbXBsZW1lbnRzICI0LWJpdCIgR0NNIEdIQVNIIGZ1bmN0aW9uIGFuZCB1bmRlcmx5aW5nCiMgc2luZ2xlIG11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbiBpbiBHRigyXjEyOCkuICI0LWJpdCIgbWVhbnMgdGhhdCBpdAojIHVzZXMgMjU2IGJ5dGVzIHBlci1rZXkgdGFibGUgWyszMiBieXRlcyBzaGFyZWQgdGFibGVdLiBUaGVyZSBpcyBubwojIGV4cGVyaW1lbnRhbCBwZXJmb3JtYW5jZSBkYXRhIGF2YWlsYWJsZSB5ZXQuIFRoZSBvbmx5IGFwcHJveGltYXRpb24KIyB0aGF0IGNhbiBiZSBtYWRlIGF0IHRoaXMgcG9pbnQgaXMgYmFzZWQgb24gY29kZSBzaXplLiBJbm5lciBsb29wIGlzCiMgMzIgaW5zdHJ1Y3Rpb25zIGxvbmcgYW5kIG9uIHNpbmdsZS1pc3N1ZSBjb3JlIHNob3VsZCBleGVjdXRlIGluIDw0MAojIGN5Y2xlcy4gSGF2aW5nIHZlcmlmaWVkIHRoYXQgZ2NjIDMuNCBkaWRuJ3QgdW5yb2xsIGNvcnJlc3BvbmRpbmcKIyBsb29wLCB0aGlzIGFzc2VtYmxlciBsb29wIGJvZHkgd2FzIGZvdW5kIHRvIGJlIH4zeCBzbWFsbGVyIHRoYW4KIyBjb21waWxlci1nZW5lcmF0ZWQgb25lLi4uCiMKIyBKdWx5IDIwMTAKIwojIFJlc2NoZWR1bGluZyBmb3IgZHVhbC1pc3N1ZSBwaXBlbGluZSByZXN1bHRlZCBpbiA4LjUlIGltcHJvdmVtZW50IG9uCiMgQ29ydGV4IEE4IGNvcmUgYW5kIH4yNSBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlICh3aGljaCB3YXMgb2JzZXJ2ZWQKIyB0byBiZSB+MyB0aW1lcyBmYXN0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGU6LSkKIwojIEZlYnJ1YXJ5IDIwMTEKIwojIFByb2ZpbGVyLWFzc2lzdGVkIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24gcmVzdWx0ZWQgaW4gNyUKIyBpbXByb3ZlbWVudCBvbiBDb3J0ZXggQTggY29yZSBhbmQgfjIzLjUgY3ljbGVzIHBlciBieXRlLgojCiMgTWFyY2ggMjAxMQojCiMgQWRkIE5FT04gaW1wbGVtZW50YXRpb24gZmVhdHVyaW5nIHBvbHlub21pYWwgbXVsdGlwbGljYXRpb24sIGkuZS4gbm8KIyBsb29rdXAgdGFibGVzIGludm9sdmVkLiBPbiBDb3J0ZXggQTggaXQgd2FzIG1lYXN1cmVkIHRvIHByb2Nlc3Mgb25lCiMgYnl0ZSBpbiAxNSBjeWNsZXMgb3IgNTUlIGZhc3RlciB0aGFuIGludGVnZXItb25seSBjb2RlLgojCiMgQXByaWwgMjAxNAojCiMgU3dpdGNoIHRvIG11bHRpcGxpY2F0aW9uIGFsZ29yaXRobSBzdWdnZXN0ZWQgaW4gcGFwZXIgcmVmZXJyZWQKIyBiZWxvdyBhbmQgY29tYmluZSBpdCB3aXRoIHJlZHVjdGlvbiBhbGdvcml0aG0gZnJvbSB4ODYgbW9kdWxlLgojIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG92ZXIgcHJldmlvdXMgdmVyc2lvbiB2YXJpZXMgZnJvbSA2NSUgb24KIyBTbmFwZHJhZ29uIFM0IHRvIDExMCUgb24gQ29ydGV4IEE5LiBJbiBhYnNvbHV0ZSB0ZXJtcyBDb3J0ZXggQTgKIyBwcm9jZXNzZXMgb25lIGJ5dGUgaW4gOC40NSBjeWNsZXMsIEE5IC0gaW4gMTAuMiwgU25hcGRyYWdvbiBTNCAtCiMgaW4gOS4zMy4KIwojIEPibWFyYSwgRC47IEdvdXbqYSwgQy4gUC4gTC47IEzzcGV6LCBKLiAmIERhaGFiLCBSLjogRmFzdCBTb2Z0d2FyZQojIFBvbHlub21pYWwgTXVsdGlwbGljYXRpb24gb24gQVJNIFByb2Nlc3NvcnMgdXNpbmcgdGhlIE5FT04gRW5naW5lLgojIAojIGh0dHA6Ly9jb25yYWRvcGxnLmNyeXB0b2xhbmQubmV0L2ZpbGVzLzIwMTAvMTIvbW9jcnlzZW4xMy5wZGYKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBOb3RlIGFib3V0ICI1MjhCIiB2YXJpYW50LiBJbiBBUk0gY2FzZSBpdCBtYWtlcyBsZXNzZXIgc2Vuc2UgdG8KIyBpbXBsZW1lbnQgaXQgZm9yIGZvbGxvd2luZyByZWFzb25zOgojCiMgLSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3b24ndCBiZSBhbnl3aGVyZSBuZWFyIDUwJSwgYmVjYXVzZSAxMjgtCiMgICBiaXQgc2hpZnQgb3BlcmF0aW9uIGlzIG5lYXRseSBmdXNlZCB3aXRoIDEyOC1iaXQgeG9yIGhlcmUsIGFuZAojICAgIjUzOEIiIHZhcmlhbnQgd291bGQgZWxpbWluYXRlIG9ubHkgNC01IGluc3RydWN0aW9ucyBvdXQgb2YgMzIKIyAgIGluIHRoZSBpbm5lciBsb29wIChtZWFuaW5nIHRoYXQgZXN0aW1hdGVkIGltcHJvdmVtZW50IGlzIH4xNSUpOwojIC0gQVJNLWJhc2VkIHN5c3RlbXMgYXJlIG9mdGVuIGVtYmVkZGVkIG9uZXMgYW5kIGV4dHJhIG1lbW9yeQojICAgY29uc3VtcHRpb24gbWlnaHQgYmUgdW5hcHByZWNpYXRlZCAoZm9yIHNvIGxpdHRsZSBpbXByb3ZlbWVudCk7CiMKIyBCeXRlIG9yZGVyIFtpbl1kZXBlbmRlbmNlLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgQ2FsbGVyIGlzIGV4cGVjdGVkIHRvIG1haW50YWluIHNwZWNpZmljICpkd29yZCogb3JkZXIgaW4gSHRhYmxlLAojIG5hbWVseSB3aXRoICpsZWFzdCogc2lnbmlmaWNhbnQgZHdvcmQgb2YgMTI4LWJpdCB2YWx1ZSBhdCAqbG93ZXIqCiMgYWRkcmVzcy4gVGhpcyBkaWZmZXJzIGNvbXBsZXRlbHkgZnJvbSBDIGNvZGUgYW5kIGhhcyBldmVyeXRoaW5nIHRvCiMgZG8gd2l0aCBsZG0gaW5zdHJ1Y3Rpb24gYW5kIG9yZGVyIGluIHdoaWNoIGR3b3JkcyBhcmUgImNvbnN1bWVkIiBieQojIGFsZ29yaXRobS4gKkJ5dGUqIG9yZGVyIHdpdGhpbiB0aGVzZSBkd29yZHMgaW4gdHVybiBpcyB3aGF0ZXZlcgojICpuYXRpdmUqIGJ5dGUgb3JkZXIgb24gY3VycmVudCBwbGF0Zm9ybS4gU2VlIGdjbTEyOC5jIGZvciB3b3JraW5nCiMgZXhhbXBsZS4uLgoKd2hpbGUgKCgkb3V0cHV0PXNoaWZ0KSAmJiAoJG91dHB1dCF+L15cd1tcd1wtXSpcLlx3KyQvKSkge30Kb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKCiRYaT0icjAiOwkjIGFyZ3VtZW50IGJsb2NrCiRIdGJsPSJyMSI7CiRpbnA9InIyIjsKJGxlbj0icjMiOwoKJFpsbD0icjQiOwkjIHZhcmlhYmxlcwokWmxoPSJyNSI7CiRaaGw9InI2IjsKJFpoaD0icjciOwokVGxsPSJyOCI7CiRUbGg9InI5IjsKJFRobD0icjEwIjsKJFRoaD0icjExIjsKJG5sbz0icjEyIjsKIyMjIyMjIyMjIyMjIyMjIyMgcjEzIGlzIHN0YWNrIHBvaW50ZXIKJG5oaT0icjE0IjsKIyMjIyMjIyMjIyMjIyMjIyMgcjE1IGlzIHByb2dyYW0gY291bnRlcgoKJHJlbV80Yml0PSRpbnA7CSMgdXNlZCBpbiBnY21fZ211bHRfNGJpdAokY250PSRsZW47CgpzdWIgWnNtYXNoKCkgewogIG15ICRpPTEyOwogIG15IEBhcmdzPUBfOwogIGZvciAoJFpsbCwkWmxoLCRaaGwsJFpoaCkgewogICAgJGNvZGUuPTw8X19fOwojaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQoJcmV2CSRfLCRfCglzdHIJJF8sWyRYaSwjJGldCiNlbGlmIGRlZmluZWQoX19BUk1FQl9fKQoJc3RyCSRfLFskWGksIyRpXQojZWxzZQoJbW92CSRUbGgsJF8sbHNyIzgKCXN0cmIJJF8sWyRYaSwjJGkrM10KCW1vdgkkVGhsLCRfLGxzciMxNgoJc3RyYgkkVGxoLFskWGksIyRpKzJdCgltb3YJJFRoaCwkXyxsc3IjMjQKCXN0cmIJJFRobCxbJFhpLCMkaSsxXQoJc3RyYgkkVGhoLFskWGksIyRpXQojZW5kaWYKX19fCiAgICAkY29kZS49Ilx0Ii5zaGlmdChAYXJncykuIlxuIjsKICAgICRpLT00OwogIH0KfQoKJGNvZGU9PDxfX187CiNpZiBkZWZpbmVkKF9fYXJtX18pCiNpbmNsdWRlICJhcm1fYXJjaC5oIgoKLnRleHQKLmNvZGUJMzIKCi50eXBlCXJlbV80Yml0LCVvYmplY3QKLmFsaWduCTUKcmVtXzRiaXQ6Ci5zaG9ydAkweDAwMDAsMHgxQzIwLDB4Mzg0MCwweDI0NjAKLnNob3J0CTB4NzA4MCwweDZDQTAsMHg0OEMwLDB4NTRFMAouc2hvcnQJMHhFMTAwLDB4RkQyMCwweEQ5NDAsMHhDNTYwCi5zaG9ydAkweDkxODAsMHg4REEwLDB4QTlDMCwweEI1RTAKLnNpemUJcmVtXzRiaXQsLi1yZW1fNGJpdAoKLnR5cGUJcmVtXzRiaXRfZ2V0LCVmdW5jdGlvbgpyZW1fNGJpdF9nZXQ6CglzdWIJJHJlbV80Yml0LHBjLCM4CglzdWIJJHJlbV80Yml0LCRyZW1fNGJpdCwjMzIJQCAmcmVtXzRiaXQKCWIJLkxyZW1fNGJpdF9nb3QKCW5vcAouc2l6ZQlyZW1fNGJpdF9nZXQsLi1yZW1fNGJpdF9nZXQKCi5nbG9iYWwJZ2NtX2doYXNoXzRiaXQKLmhpZGRlbglnY21fZ2hhc2hfNGJpdAoudHlwZQlnY21fZ2hhc2hfNGJpdCwlZnVuY3Rpb24KZ2NtX2doYXNoXzRiaXQ6CglzdWIJcjEyLHBjLCM4CglhZGQJJGxlbiwkaW5wLCRsZW4JCUAgJGxlbiB0byBwb2ludCBhdCB0aGUgZW5kCglzdG1kYglzcCEse3IzLXIxMSxscn0JCUAgc2F2ZSAkbGVuL2VuZCB0b28KCXN1YglyMTIscjEyLCM0OAkJQCAmcmVtXzRiaXQKCglsZG1pYQlyMTIse3I0LXIxMX0JCUAgY29weSByZW1fNGJpdCAuLi4KCXN0bWRiCXNwISx7cjQtcjExfQkJQCAuLi4gdG8gc3RhY2sKCglsZHJiCSRubG8sWyRpbnAsIzE1XQoJbGRyYgkkbmhpLFskWGksIzE1XQouTG91dGVyOgoJZW9yCSRubG8sJG5sbywkbmhpCglhbmQJJG5oaSwkbmxvLCMweGYwCglhbmQJJG5sbywkbmxvLCMweDBmCgltb3YJJGNudCwjMTQKCglhZGQJJFpoaCwkSHRibCwkbmxvLGxzbCM0CglsZG1pYQkkWmhoLHskWmxsLSRaaGh9CUAgbG9hZCBIdGJsW25sb10KCWFkZAkkVGhoLCRIdGJsLCRuaGkKCWxkcmIJJG5sbyxbJGlucCwjMTRdCgoJYW5kCSRuaGksJFpsbCwjMHhmCQlAIHJlbQoJbGRtaWEJJFRoaCx7JFRsbC0kVGhofQlAIGxvYWQgSHRibFtuaGldCglhZGQJJG5oaSwkbmhpLCRuaGkKCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAoJbGRyaAkkVGxsLFtzcCwkbmhpXQkJQCByZW1fNGJpdFtyZW1dCgllb3IJJFpsbCwkWmxsLCRabGgsbHNsIzI4CglsZHJiCSRuaGksWyRYaSwjMTRdCgllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAoJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAoJZW9yCSRaaGgsJFRoaCwkWmhoLGxzciM0Cgllb3IJJG5sbywkbmxvLCRuaGkKCWFuZAkkbmhpLCRubG8sIzB4ZjAKCWFuZAkkbmxvLCRubG8sIzB4MGYKCWVvcgkkWmhoLCRaaGgsJFRsbCxsc2wjMTYKCi5MaW5uZXI6CglhZGQJJFRoaCwkSHRibCwkbmxvLGxzbCM0CglhbmQJJG5sbywkWmxsLCMweGYJCUAgcmVtCglzdWJzCSRjbnQsJGNudCwjMQoJYWRkCSRubG8sJG5sbywkbmxvCglsZG1pYQkkVGhoLHskVGxsLSRUaGh9CUAgbG9hZCBIdGJsW25sb10KCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAoJZW9yCSRabGwsJFpsbCwkWmxoLGxzbCMyOAoJZW9yCSRabGgsJFRsaCwkWmxoLGxzciM0Cgllb3IJJFpsaCwkWmxoLCRaaGwsbHNsIzI4CglsZHJoCSRUbGwsW3NwLCRubG9dCQlAIHJlbV80Yml0W3JlbV0KCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAoJbGRycGxiCSRubG8sWyRpbnAsJGNudF0KCWVvcgkkWmhsLCRaaGwsJFpoaCxsc2wjMjgKCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAoKCWFkZAkkVGhoLCRIdGJsLCRuaGkKCWFuZAkkbmhpLCRabGwsIzB4ZgkJQCByZW0KCWVvcgkkWmhoLCRaaGgsJFRsbCxsc2wjMTYJQCBePSByZW1fNGJpdFtyZW1dCglhZGQJJG5oaSwkbmhpLCRuaGkKCWxkbWlhCSRUaGgseyRUbGwtJFRoaH0JQCBsb2FkIEh0YmxbbmhpXQoJZW9yCSRabGwsJFRsbCwkWmxsLGxzciM0CglsZHJwbGIJJFRsbCxbJFhpLCRjbnRdCgllb3IJJFpsbCwkWmxsLCRabGgsbHNsIzI4Cgllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKCWxkcmgJJFRsaCxbc3AsJG5oaV0KCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAoJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAoJZW9ycGwJJG5sbywkbmxvLCRUbGwKCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAoJYW5kcGwJJG5oaSwkbmxvLCMweGYwCglhbmRwbAkkbmxvLCRubG8sIzB4MGYKCWVvcgkkWmhoLCRaaGgsJFRsaCxsc2wjMTYJQCBePSByZW1fNGJpdFtyZW1dCglicGwJLkxpbm5lcgoKCWxkcgkkbGVuLFtzcCwjMzJdCQlAIHJlLWxvYWQgJGxlbi9lbmQKCWFkZAkkaW5wLCRpbnAsIzE2Cgltb3YJJG5oaSwkWmxsCl9fXwoJJlpzbWFzaCgiY21wXHQkaW5wLCRsZW4iLCJsZHJuZWJcdCRubG8sWyRpbnAsIzE1XSIpOwokY29kZS49PDxfX187CglibmUJLkxvdXRlcgoKCWFkZAlzcCxzcCwjMzYKI2lmIF9fQVJNX0FSQ0hfXz49NQoJbGRtaWEJc3AhLHtyNC1yMTEscGN9CiNlbHNlCglsZG1pYQlzcCEse3I0LXIxMSxscn0KCXRzdAlsciwjMQoJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAoJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKI2VuZGlmCi5zaXplCWdjbV9naGFzaF80Yml0LC4tZ2NtX2doYXNoXzRiaXQKCi5nbG9iYWwJZ2NtX2dtdWx0XzRiaXQKLmhpZGRlbglnY21fZ211bHRfNGJpdAoudHlwZQlnY21fZ211bHRfNGJpdCwlZnVuY3Rpb24KZ2NtX2dtdWx0XzRiaXQ6CglzdG1kYglzcCEse3I0LXIxMSxscn0KCWxkcmIJJG5sbyxbJFhpLCMxNV0KCWIJcmVtXzRiaXRfZ2V0Ci5McmVtXzRiaXRfZ290OgoJYW5kCSRuaGksJG5sbywjMHhmMAoJYW5kCSRubG8sJG5sbywjMHgwZgoJbW92CSRjbnQsIzE0CgoJYWRkCSRaaGgsJEh0YmwsJG5sbyxsc2wjNAoJbGRtaWEJJFpoaCx7JFpsbC0kWmhofQlAIGxvYWQgSHRibFtubG9dCglsZHJiCSRubG8sWyRYaSwjMTRdCgoJYWRkCSRUaGgsJEh0YmwsJG5oaQoJYW5kCSRuaGksJFpsbCwjMHhmCQlAIHJlbQoJbGRtaWEJJFRoaCx7JFRsbC0kVGhofQlAIGxvYWQgSHRibFtuaGldCglhZGQJJG5oaSwkbmhpLCRuaGkKCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAoJbGRyaAkkVGxsLFskcmVtXzRiaXQsJG5oaV0JQCByZW1fNGJpdFtyZW1dCgllb3IJJFpsbCwkWmxsLCRabGgsbHNsIzI4Cgllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAoJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAoJZW9yCSRaaGgsJFRoaCwkWmhoLGxzciM0CglhbmQJJG5oaSwkbmxvLCMweGYwCgllb3IJJFpoaCwkWmhoLCRUbGwsbHNsIzE2CglhbmQJJG5sbywkbmxvLCMweDBmCgouTG9vcDoKCWFkZAkkVGhoLCRIdGJsLCRubG8sbHNsIzQKCWFuZAkkbmxvLCRabGwsIzB4ZgkJQCByZW0KCXN1YnMJJGNudCwkY250LCMxCglhZGQJJG5sbywkbmxvLCRubG8KCWxkbWlhCSRUaGgseyRUbGwtJFRoaH0JQCBsb2FkIEh0YmxbbmxvXQoJZW9yCSRabGwsJFRsbCwkWmxsLGxzciM0Cgllb3IJJFpsbCwkWmxsLCRabGgsbHNsIzI4Cgllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKCWxkcmgJJFRsbCxbJHJlbV80Yml0LCRubG9dCUAgcmVtXzRiaXRbcmVtXQoJZW9yCSRaaGwsJFRobCwkWmhsLGxzciM0CglsZHJwbGIJJG5sbyxbJFhpLCRjbnRdCgllb3IJJFpobCwkWmhsLCRaaGgsbHNsIzI4Cgllb3IJJFpoaCwkVGhoLCRaaGgsbHNyIzQKCglhZGQJJFRoaCwkSHRibCwkbmhpCglhbmQJJG5oaSwkWmxsLCMweGYJCUAgcmVtCgllb3IJJFpoaCwkWmhoLCRUbGwsbHNsIzE2CUAgXj0gcmVtXzRiaXRbcmVtXQoJYWRkCSRuaGksJG5oaSwkbmhpCglsZG1pYQkkVGhoLHskVGxsLSRUaGh9CUAgbG9hZCBIdGJsW25oaV0KCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAoJZW9yCSRabGwsJFpsbCwkWmxoLGxzbCMyOAoJZW9yCSRabGgsJFRsaCwkWmxoLGxzciM0CglsZHJoCSRUbGwsWyRyZW1fNGJpdCwkbmhpXQlAIHJlbV80Yml0W3JlbV0KCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAoJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAoJZW9yCSRaaGgsJFRoaCwkWmhoLGxzciM0CglhbmRwbAkkbmhpLCRubG8sIzB4ZjAKCWFuZHBsCSRubG8sJG5sbywjMHgwZgoJZW9yCSRaaGgsJFpoaCwkVGxsLGxzbCMxNglAIF49IHJlbV80Yml0W3JlbV0KCWJwbAkuTG9vcApfX18KCSZac21hc2goKTsKJGNvZGUuPTw8X19fOwojaWYgX19BUk1fQVJDSF9fPj01CglsZG1pYQlzcCEse3I0LXIxMSxwY30KI2Vsc2UKCWxkbWlhCXNwISx7cjQtcjExLGxyfQoJdHN0CWxyLCMxCgltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CglieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQojZW5kaWYKLnNpemUJZ2NtX2dtdWx0XzRiaXQsLi1nY21fZ211bHRfNGJpdApfX18KewpteSAoJFhsLCRYbSwkWGgsJElOKT1tYXAoInEkXyIsKDAuLjMpKTsKbXkgKCR0MCwkdDEsJHQyLCR0Myk9bWFwKCJxJF8iLCg4Li4xMikpOwpteSAoJEhsbywkSGhpLCRIaGwsJGs0OCwkazMyLCRrMTYpPW1hcCgiZCRfIiwoMjYuLjMxKSk7CgpzdWIgY2xtdWw2NHg2NCB7Cm15ICgkciwkYSwkYik9QF87CiRjb2RlLj08PF9fXzsKCXZleHQuOAkJJHQwI2xvLCAkYSwgJGEsICMxCUAgQTEKCXZtdWxsLnA4CSR0MCwgJHQwI2xvLCAkYgkJQCBGID0gQTEqQgoJdmV4dC44CQkkciNsbywgJGIsICRiLCAjMQlAIEIxCgl2bXVsbC5wOAkkciwgJGEsICRyI2xvCQlAIEUgPSBBKkIxCgl2ZXh0LjgJCSR0MSNsbywgJGEsICRhLCAjMglAIEEyCgl2bXVsbC5wOAkkdDEsICR0MSNsbywgJGIJCUAgSCA9IEEyKkIKCXZleHQuOAkJJHQzI2xvLCAkYiwgJGIsICMyCUAgQjIKCXZtdWxsLnA4CSR0MywgJGEsICR0MyNsbwkJQCBHID0gQSpCMgoJdmV4dC44CQkkdDIjbG8sICRhLCAkYSwgIzMJQCBBMwoJdmVvcgkJJHQwLCAkdDAsICRyCQlAIEwgPSBFICsgRgoJdm11bGwucDgJJHQyLCAkdDIjbG8sICRiCQlAIEogPSBBMypCCgl2ZXh0LjgJCSRyI2xvLCAkYiwgJGIsICMzCUAgQjMKCXZlb3IJCSR0MSwgJHQxLCAkdDMJCUAgTSA9IEcgKyBICgl2bXVsbC5wOAkkciwgJGEsICRyI2xvCQlAIEkgPSBBKkIzCgl2ZW9yCQkkdDAjbG8sICR0MCNsbywgJHQwI2hpCUAgdDAgPSAoTCkgKFAwICsgUDEpIDw8IDgKCXZhbmQJCSR0MCNoaSwgJHQwI2hpLCAkazQ4Cgl2ZXh0LjgJCSR0MyNsbywgJGIsICRiLCAjNAlAIEI0Cgl2ZW9yCQkkdDEjbG8sICR0MSNsbywgJHQxI2hpCUAgdDEgPSAoTSkgKFAyICsgUDMpIDw8IDE2Cgl2YW5kCQkkdDEjaGksICR0MSNoaSwgJGszMgoJdm11bGwucDgJJHQzLCAkYSwgJHQzI2xvCQlAIEsgPSBBKkI0Cgl2ZW9yCQkkdDIsICR0MiwgJHIJCUAgTiA9IEkgKyBKCgl2ZW9yCQkkdDAjbG8sICR0MCNsbywgJHQwI2hpCgl2ZW9yCQkkdDEjbG8sICR0MSNsbywgJHQxI2hpCgl2ZW9yCQkkdDIjbG8sICR0MiNsbywgJHQyI2hpCUAgdDIgPSAoTikgKFA0ICsgUDUpIDw8IDI0Cgl2YW5kCQkkdDIjaGksICR0MiNoaSwgJGsxNgoJdmV4dC44CQkkdDAsICR0MCwgJHQwLCAjMTUKCXZlb3IJCSR0MyNsbywgJHQzI2xvLCAkdDMjaGkJQCB0MyA9IChLKSAoUDYgKyBQNykgPDwgMzIKCXZtb3YuaTY0CSR0MyNoaSwgIzAKCXZleHQuOAkJJHQxLCAkdDEsICR0MSwgIzE0Cgl2ZW9yCQkkdDIjbG8sICR0MiNsbywgJHQyI2hpCgl2bXVsbC5wOAkkciwgJGEsICRiCQlAIEQgPSBBKkIKCXZleHQuOAkJJHQzLCAkdDMsICR0MywgIzEyCgl2ZXh0LjgJCSR0MiwgJHQyLCAkdDIsICMxMwoJdmVvcgkJJHQwLCAkdDAsICR0MQoJdmVvcgkJJHQyLCAkdDIsICR0MwoJdmVvcgkJJHIsICRyLCAkdDAKCXZlb3IJCSRyLCAkciwgJHQyCl9fXwp9CgokY29kZS49PDxfX187CiNpZiBfX0FSTV9BUkNIX18+PTcKLmZwdQluZW9uCgouZ2xvYmFsCWdjbV9pbml0X25lb24KLmhpZGRlbglnY21faW5pdF9uZW9uCi50eXBlCWdjbV9pbml0X25lb24sJWZ1bmN0aW9uCi5hbGlnbgk0CmdjbV9pbml0X25lb246Cgl2bGQxLjY0CQkkSU4jaGksW3IxLDo2NF0hCUAgbG9hZCBICgl2bW92Lmk4CQkkdDAsIzB4ZTEKCXZsZDEuNjQJCSRJTiNsbyxbcjEsOjY0XQoJdnNobC5pNjQJJHQwI2hpLCM1NwoJdnNoci51NjQJJHQwI2xvLCM2MwkJQCB0MD0weGMyLi4uLjAxCgl2ZHVwLjgJCSR0MSwkSU4jaGlbN10KCXZzaHIudTY0CSRIbG8sJElOI2xvLCM2MwoJdnNoci5zOAkJJHQxLCM3CQkJQCBicm9hZGNhc3QgY2FycnkgYml0Cgl2c2hsLmk2NAkkSU4sJElOLCMxCgl2YW5kCQkkdDAsJHQwLCR0MQoJdm9ycgkJJElOI2hpLCRIbG8JCUAgSDw8PD0xCgl2ZW9yCQkkSU4sJElOLCR0MAkJQCB0d2lzdGVkIEgKCXZzdG1pYQkJcjAseyRJTn0KCglieAlscgouc2l6ZQlnY21faW5pdF9uZW9uLC4tZ2NtX2luaXRfbmVvbgoKLmdsb2JhbAlnY21fZ211bHRfbmVvbgouaGlkZGVuCWdjbV9nbXVsdF9uZW9uCi50eXBlCWdjbV9nbXVsdF9uZW9uLCVmdW5jdGlvbgouYWxpZ24JNApnY21fZ211bHRfbmVvbjoKCXZsZDEuNjQJCSRJTiNoaSxbJFhpLDo2NF0hCUAgbG9hZCBYaQoJdmxkMS42NAkJJElOI2xvLFskWGksOjY0XSEKCXZtb3YuaTY0CSRrNDgsIzB4MDAwMGZmZmZmZmZmZmZmZgoJdmxkbWlhCQkkSHRibCx7JEhsby0kSGhpfQlAIGxvYWQgdHdpc3RlZCBICgl2bW92Lmk2NAkkazMyLCMweDAwMDAwMDAwZmZmZmZmZmYKI2lmZGVmIF9fQVJNRUxfXwoJdnJldjY0LjgJJElOLCRJTgojZW5kaWYKCXZtb3YuaTY0CSRrMTYsIzB4MDAwMDAwMDAwMDAwZmZmZgoJdmVvcgkJJEhobCwkSGxvLCRIaGkJCUAgS2FyYXRzdWJhIHByZS1wcm9jZXNzaW5nCgltb3YJCSRsZW4sIzE2CgliCQkuTGdtdWx0X25lb24KLnNpemUJZ2NtX2dtdWx0X25lb24sLi1nY21fZ211bHRfbmVvbgoKLmdsb2JhbAlnY21fZ2hhc2hfbmVvbgouaGlkZGVuCWdjbV9naGFzaF9uZW9uCi50eXBlCWdjbV9naGFzaF9uZW9uLCVmdW5jdGlvbgouYWxpZ24JNApnY21fZ2hhc2hfbmVvbjoKCXZsZDEuNjQJCSRYbCNoaSxbJFhpLDo2NF0hCUAgbG9hZCBYaQoJdmxkMS42NAkJJFhsI2xvLFskWGksOjY0XSEKCXZtb3YuaTY0CSRrNDgsIzB4MDAwMGZmZmZmZmZmZmZmZgoJdmxkbWlhCQkkSHRibCx7JEhsby0kSGhpfQlAIGxvYWQgdHdpc3RlZCBICgl2bW92Lmk2NAkkazMyLCMweDAwMDAwMDAwZmZmZmZmZmYKI2lmZGVmIF9fQVJNRUxfXwoJdnJldjY0LjgJJFhsLCRYbAojZW5kaWYKCXZtb3YuaTY0CSRrMTYsIzB4MDAwMDAwMDAwMDAwZmZmZgoJdmVvcgkJJEhobCwkSGxvLCRIaGkJCUAgS2FyYXRzdWJhIHByZS1wcm9jZXNzaW5nCgouTG9vcF9uZW9uOgoJdmxkMS42NAkJJElOI2hpLFskaW5wXSEJCUAgbG9hZCBpbnAKCXZsZDEuNjQJCSRJTiNsbyxbJGlucF0hCiNpZmRlZiBfX0FSTUVMX18KCXZyZXY2NC44CSRJTiwkSU4KI2VuZGlmCgl2ZW9yCQkkSU4sJFhsCQkJQCBpbnBePVhpCi5MZ211bHRfbmVvbjoKX19fCgkmY2xtdWw2NHg2NAkoJFhsLCRIbG8sIiRJTiNsbyIpOwkjIEgubG+3WGkubG8KJGNvZGUuPTw8X19fOwoJdmVvcgkJJElOI2xvLCRJTiNsbywkSU4jaGkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKX19fCgkmY2xtdWw2NHg2NAkoJFhtLCRIaGwsIiRJTiNsbyIpOwkjIChILmxvK0guaGkptyhYaS5sbytYaS5oaSkKCSZjbG11bDY0eDY0CSgkWGgsJEhoaSwiJElOI2hpIik7CSMgSC5oabdYaS5oaQokY29kZS49PDxfX187Cgl2ZW9yCQkkWG0sJFhtLCRYbAkJQCBLYXJhdHN1YmEgcG9zdC1wcm9jZXNzaW5nCgl2ZW9yCQkkWG0sJFhtLCRYaAoJdmVvcgkJJFhsI2hpLCRYbCNoaSwkWG0jbG8KCXZlb3IJCSRYaCNsbywkWGgjbG8sJFhtI2hpCUAgWGh8WGwgLSAyNTYtYml0IHJlc3VsdAoKCUAgZXF1aXZhbGVudCBvZiByZWR1Y3Rpb25fYXZ4IGZyb20gZ2hhc2gteDg2XzY0LnBsCgl2c2hsLmk2NAkkdDEsJFhsLCM1NwkJQCAxc3QgcGhhc2UKCXZzaGwuaTY0CSR0MiwkWGwsIzYyCgl2ZW9yCQkkdDIsJHQyLCR0MQkJQAoJdnNobC5pNjQJJHQxLCRYbCwjNjMKCXZlb3IJCSR0MiwgJHQyLCAkdDEJCUAKIAl2ZW9yCQkkWGwjaGksJFhsI2hpLCR0MiNsbwlACgl2ZW9yCQkkWGgjbG8sJFhoI2xvLCR0MiNoaQoKCXZzaHIudTY0CSR0MiwkWGwsIzEJCUAgMm5kIHBoYXNlCgl2ZW9yCQkkWGgsJFhoLCRYbAoJdmVvcgkJJFhsLCRYbCwkdDIJCUAKCXZzaHIudTY0CSR0MiwkdDIsIzYKCXZzaHIudTY0CSRYbCwkWGwsIzEJCUAKCXZlb3IJCSRYbCwkWGwsJFhoCQlACgl2ZW9yCQkkWGwsJFhsLCR0MgkJQAoKCXN1YnMJCSRsZW4sIzE2CglibmUJCS5Mb29wX25lb24KCiNpZmRlZiBfX0FSTUVMX18KCXZyZXY2NC44CSRYbCwkWGwKI2VuZGlmCglzdWIJCSRYaSwjMTYJCgl2c3QxLjY0CQkkWGwjaGksWyRYaSw6NjRdIQlAIHdyaXRlIG91dCBYaQoJdnN0MS42NAkJJFhsI2xvLFskWGksOjY0XQoKCWJ4CWxyCi5zaXplCWdjbV9naGFzaF9uZW9uLC4tZ2NtX2doYXNoX25lb24KI2VuZGlmCl9fXwp9CiRjb2RlLj08PF9fXzsKLmFzY2l6ICAiR0hBU0ggZm9yIEFSTXY0L05FT04sIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCi5hbGlnbiAgMgoKI2VuZGlmCl9fXwoKZm9yZWFjaCAoc3BsaXQoIlxuIiwkY29kZSkpIHsKCXMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VvOwoKCXMvXGJxKFswLTldKykjKGxvfGhpKS9zcHJpbnRmICJkJWQiLDIqJDErKCQyIGVxICJoaSIpL2dlbwlvcgoJcy9cYmJ4XHMrbHJcYi8ud29yZFx0MHhlMTJmZmYxZS9nbzsgICAgIyBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCAtbWFyY2g9YXJtdjQKCglwcmludCAkXywiXG4iOwp9CmNsb3NlIFNURE9VVDsgIyBlbmZvcmNlIGZsdXNoCg==