IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgQXByaWwgMjAxMAojCiMgVGhlIG1vZHVsZSBpbXBsZW1lbnRzICI0LWJpdCIgR0NNIEdIQVNIIGZ1bmN0aW9uIGFuZCB1bmRlcmx5aW5nCiMgc2luZ2xlIG11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbiBpbiBHRigyXjEyOCkuICI0LWJpdCIgbWVhbnMgdGhhdCBpdAojIHVzZXMgMjU2IGJ5dGVzIHBlci1rZXkgdGFibGUgWyszMiBieXRlcyBzaGFyZWQgdGFibGVdLiBUaGVyZSBpcyBubwojIGV4cGVyaW1lbnRhbCBwZXJmb3JtYW5jZSBkYXRhIGF2YWlsYWJsZSB5ZXQuIFRoZSBvbmx5IGFwcHJveGltYXRpb24KIyB0aGF0IGNhbiBiZSBtYWRlIGF0IHRoaXMgcG9pbnQgaXMgYmFzZWQgb24gY29kZSBzaXplLiBJbm5lciBsb29wIGlzCiMgMzIgaW5zdHJ1Y3Rpb25zIGxvbmcgYW5kIG9uIHNpbmdsZS1pc3N1ZSBjb3JlIHNob3VsZCBleGVjdXRlIGluIDw0MAojIGN5Y2xlcy4gSGF2aW5nIHZlcmlmaWVkIHRoYXQgZ2NjIDMuNCBkaWRuJ3QgdW5yb2xsIGNvcnJlc3BvbmRpbmcKIyBsb29wLCB0aGlzIGFzc2VtYmxlciBsb29wIGJvZHkgd2FzIGZvdW5kIHRvIGJlIH4zeCBzbWFsbGVyIHRoYW4KIyBjb21waWxlci1nZW5lcmF0ZWQgb25lLi4uCiMKIyBKdWx5IDIwMTAKIwojIFJlc2NoZWR1bGluZyBmb3IgZHVhbC1pc3N1ZSBwaXBlbGluZSByZXN1bHRlZCBpbiA4LjUlIGltcHJvdmVtZW50IG9uCiMgQ29ydGV4IEE4IGNvcmUgYW5kIH4yNSBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlICh3aGljaCB3YXMgb2JzZXJ2ZWQKIyB0byBiZSB+MyB0aW1lcyBmYXN0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGU6LSkKIwojIEZlYnJ1YXJ5IDIwMTEKIwojIFByb2ZpbGVyLWFzc2lzdGVkIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24gcmVzdWx0ZWQgaW4gNyUKIyBpbXByb3ZlbWVudCBvbiBDb3J0ZXggQTggY29yZSBhbmQgfjIzLjUgY3ljbGVzIHBlciBieXRlLgojCiMgTWFyY2ggMjAxMQojCiMgQWRkIE5FT04gaW1wbGVtZW50YXRpb24gZmVhdHVyaW5nIHBvbHlub21pYWwgbXVsdGlwbGljYXRpb24sIGkuZS4gbm8KIyBsb29rdXAgdGFibGVzIGludm9sdmVkLiBPbiBDb3J0ZXggQTggaXQgd2FzIG1lYXN1cmVkIHRvIHByb2Nlc3Mgb25lCiMgYnl0ZSBpbiAxNSBjeWNsZXMgb3IgNTUlIGZhc3RlciB0aGFuIGludGVnZXItb25seSBjb2RlLgoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIE5vdGUgYWJvdXQgIjUyOEIiIHZhcmlhbnQuIEluIEFSTSBjYXNlIGl0IG1ha2VzIGxlc3NlciBzZW5zZSB0bwojIGltcGxlbWVudCBpdCBmb3IgZm9sbG93aW5nIHJlYXNvbnM6CiMKIyAtIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHdvbid0IGJlIGFueXdoZXJlIG5lYXIgNTAlLCBiZWNhdXNlIDEyOC0KIyAgIGJpdCBzaGlmdCBvcGVyYXRpb24gaXMgbmVhdGx5IGZ1c2VkIHdpdGggMTI4LWJpdCB4b3IgaGVyZSwgYW5kCiMgICAiNTM4QiIgdmFyaWFudCB3b3VsZCBlbGltaW5hdGUgb25seSA0LTUgaW5zdHJ1Y3Rpb25zIG91dCBvZiAzMgojICAgaW4gdGhlIGlubmVyIGxvb3AgKG1lYW5pbmcgdGhhdCBlc3RpbWF0ZWQgaW1wcm92ZW1lbnQgaXMgfjE1JSk7CiMgLSBBUk0tYmFzZWQgc3lzdGVtcyBhcmUgb2Z0ZW4gZW1iZWRkZWQgb25lcyBhbmQgZXh0cmEgbWVtb3J5CiMgICBjb25zdW1wdGlvbiBtaWdodCBiZSB1bmFwcHJlY2lhdGVkIChmb3Igc28gbGl0dGxlIGltcHJvdmVtZW50KTsKIwojIEJ5dGUgb3JkZXIgW2luXWRlcGVuZGVuY2UuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMKIyBDYWxsZXIgaXMgZXhwZWN0ZWQgdG8gbWFpbnRhaW4gc3BlY2lmaWMgKmR3b3JkKiBvcmRlciBpbiBIdGFibGUsCiMgbmFtZWx5IHdpdGggKmxlYXN0KiBzaWduaWZpY2FudCBkd29yZCBvZiAxMjgtYml0IHZhbHVlIGF0ICpsb3dlcioKIyBhZGRyZXNzLiBUaGlzIGRpZmZlcnMgY29tcGxldGVseSBmcm9tIEMgY29kZSBhbmQgaGFzIGV2ZXJ5dGhpbmcgdG8KIyBkbyB3aXRoIGxkbSBpbnN0cnVjdGlvbiBhbmQgb3JkZXIgaW4gd2hpY2ggZHdvcmRzIGFyZSAiY29uc3VtZWQiIGJ5CiMgYWxnb3JpdGhtLiAqQnl0ZSogb3JkZXIgd2l0aGluIHRoZXNlIGR3b3JkcyBpbiB0dXJuIGlzIHdoYXRldmVyCiMgKm5hdGl2ZSogYnl0ZSBvcmRlciBvbiBjdXJyZW50IHBsYXRmb3JtLiBTZWUgZ2NtMTI4LmMgZm9yIHdvcmtpbmcKIyBleGFtcGxlLi4uCgp3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQpvcGVuIFNURE9VVCwiPiRvdXRwdXQiOwoKJFhpPSJyMCI7CSMgYXJndW1lbnQgYmxvY2sKJEh0Ymw9InIxIjsKJGlucD0icjIiOwokbGVuPSJyMyI7CgokWmxsPSJyNCI7CSMgdmFyaWFibGVzCiRabGg9InI1IjsKJFpobD0icjYiOwokWmhoPSJyNyI7CiRUbGw9InI4IjsKJFRsaD0icjkiOwokVGhsPSJyMTAiOwokVGhoPSJyMTEiOwokbmxvPSJyMTIiOwojIyMjIyMjIyMjIyMjIyMjIyByMTMgaXMgc3RhY2sgcG9pbnRlcgokbmhpPSJyMTQiOwojIyMjIyMjIyMjIyMjIyMjIyByMTUgaXMgcHJvZ3JhbSBjb3VudGVyCgokcmVtXzRiaXQ9JGlucDsJIyB1c2VkIGluIGdjbV9nbXVsdF80Yml0CiRjbnQ9JGxlbjsKCnN1YiBac21hc2goKSB7CiAgbXkgJGk9MTI7CiAgbXkgQGFyZ3M9QF87CiAgZm9yICgkWmxsLCRabGgsJFpobCwkWmhoKSB7CiAgICAkY29kZS49PDxfX187CiNpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCglyZXYJJF8sJF8KCXN0cgkkXyxbJFhpLCMkaV0KI2VsaWYgZGVmaW5lZChfX0FSTUVCX18pCglzdHIJJF8sWyRYaSwjJGldCiNlbHNlCgltb3YJJFRsaCwkXyxsc3IjOAoJc3RyYgkkXyxbJFhpLCMkaSszXQoJbW92CSRUaGwsJF8sbHNyIzE2CglzdHJiCSRUbGgsWyRYaSwjJGkrMl0KCW1vdgkkVGhoLCRfLGxzciMyNAoJc3RyYgkkVGhsLFskWGksIyRpKzFdCglzdHJiCSRUaGgsWyRYaSwjJGldCiNlbmRpZgpfX18KICAgICRjb2RlLj0iXHQiLnNoaWZ0KEBhcmdzKS4iXG4iOwogICAgJGktPTQ7CiAgfQp9CgokY29kZT08PF9fXzsKI2lmIGRlZmluZWQoX19hcm1fXykKI2luY2x1ZGUgImFybV9hcmNoLmgiCgoudGV4dAouY29kZQkzMgoKLnR5cGUJcmVtXzRiaXQsJW9iamVjdAouYWxpZ24JNQpyZW1fNGJpdDoKLnNob3J0CTB4MDAwMCwweDFDMjAsMHgzODQwLDB4MjQ2MAouc2hvcnQJMHg3MDgwLDB4NkNBMCwweDQ4QzAsMHg1NEUwCi5zaG9ydAkweEUxMDAsMHhGRDIwLDB4RDk0MCwweEM1NjAKLnNob3J0CTB4OTE4MCwweDhEQTAsMHhBOUMwLDB4QjVFMAouc2l6ZQlyZW1fNGJpdCwuLXJlbV80Yml0CgoudHlwZQlyZW1fNGJpdF9nZXQsJWZ1bmN0aW9uCnJlbV80Yml0X2dldDoKCXN1YgkkcmVtXzRiaXQscGMsIzgKCXN1YgkkcmVtXzRiaXQsJHJlbV80Yml0LCMzMglAICZyZW1fNGJpdAoJYgkuTHJlbV80Yml0X2dvdAoJbm9wCi5zaXplCXJlbV80Yml0X2dldCwuLXJlbV80Yml0X2dldAoKLmdsb2JhbAlnY21fZ2hhc2hfNGJpdAoudHlwZQlnY21fZ2hhc2hfNGJpdCwlZnVuY3Rpb24KZ2NtX2doYXNoXzRiaXQ6CglzdWIJcjEyLHBjLCM4CglhZGQJJGxlbiwkaW5wLCRsZW4JCUAgJGxlbiB0byBwb2ludCBhdCB0aGUgZW5kCglzdG1kYglzcCEse3IzLXIxMSxscn0JCUAgc2F2ZSAkbGVuL2VuZCB0b28KCXN1YglyMTIscjEyLCM0OAkJQCAmcmVtXzRiaXQKCglsZG1pYQlyMTIse3I0LXIxMX0JCUAgY29weSByZW1fNGJpdCAuLi4KCXN0bWRiCXNwISx7cjQtcjExfQkJQCAuLi4gdG8gc3RhY2sKCglsZHJiCSRubG8sWyRpbnAsIzE1XQoJbGRyYgkkbmhpLFskWGksIzE1XQouTG91dGVyOgoJZW9yCSRubG8sJG5sbywkbmhpCglhbmQJJG5oaSwkbmxvLCMweGYwCglhbmQJJG5sbywkbmxvLCMweDBmCgltb3YJJGNudCwjMTQKCglhZGQJJFpoaCwkSHRibCwkbmxvLGxzbCM0CglsZG1pYQkkWmhoLHskWmxsLSRaaGh9CUAgbG9hZCBIdGJsW25sb10KCWFkZAkkVGhoLCRIdGJsLCRuaGkKCWxkcmIJJG5sbyxbJGlucCwjMTRdCgoJYW5kCSRuaGksJFpsbCwjMHhmCQlAIHJlbQoJbGRtaWEJJFRoaCx7JFRsbC0kVGhofQlAIGxvYWQgSHRibFtuaGldCglhZGQJJG5oaSwkbmhpLCRuaGkKCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAoJbGRyaAkkVGxsLFtzcCwkbmhpXQkJQCByZW1fNGJpdFtyZW1dCgllb3IJJFpsbCwkWmxsLCRabGgsbHNsIzI4CglsZHJiCSRuaGksWyRYaSwjMTRdCgllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAoJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAoJZW9yCSRaaGgsJFRoaCwkWmhoLGxzciM0Cgllb3IJJG5sbywkbmxvLCRuaGkKCWFuZAkkbmhpLCRubG8sIzB4ZjAKCWFuZAkkbmxvLCRubG8sIzB4MGYKCWVvcgkkWmhoLCRaaGgsJFRsbCxsc2wjMTYKCi5MaW5uZXI6CglhZGQJJFRoaCwkSHRibCwkbmxvLGxzbCM0CglhbmQJJG5sbywkWmxsLCMweGYJCUAgcmVtCglzdWJzCSRjbnQsJGNudCwjMQoJYWRkCSRubG8sJG5sbywkbmxvCglsZG1pYQkkVGhoLHskVGxsLSRUaGh9CUAgbG9hZCBIdGJsW25sb10KCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAoJZW9yCSRabGwsJFpsbCwkWmxoLGxzbCMyOAoJZW9yCSRabGgsJFRsaCwkWmxoLGxzciM0Cgllb3IJJFpsaCwkWmxoLCRaaGwsbHNsIzI4CglsZHJoCSRUbGwsW3NwLCRubG9dCQlAIHJlbV80Yml0W3JlbV0KCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAoJbGRycGxiCSRubG8sWyRpbnAsJGNudF0KCWVvcgkkWmhsLCRaaGwsJFpoaCxsc2wjMjgKCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAoKCWFkZAkkVGhoLCRIdGJsLCRuaGkKCWFuZAkkbmhpLCRabGwsIzB4ZgkJQCByZW0KCWVvcgkkWmhoLCRaaGgsJFRsbCxsc2wjMTYJQCBePSByZW1fNGJpdFtyZW1dCglhZGQJJG5oaSwkbmhpLCRuaGkKCWxkbWlhCSRUaGgseyRUbGwtJFRoaH0JQCBsb2FkIEh0YmxbbmhpXQoJZW9yCSRabGwsJFRsbCwkWmxsLGxzciM0CglsZHJwbGIJJFRsbCxbJFhpLCRjbnRdCgllb3IJJFpsbCwkWmxsLCRabGgsbHNsIzI4Cgllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKCWxkcmgJJFRsaCxbc3AsJG5oaV0KCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAoJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAoJZW9ycGwJJG5sbywkbmxvLCRUbGwKCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAoJYW5kcGwJJG5oaSwkbmxvLCMweGYwCglhbmRwbAkkbmxvLCRubG8sIzB4MGYKCWVvcgkkWmhoLCRaaGgsJFRsaCxsc2wjMTYJQCBePSByZW1fNGJpdFtyZW1dCglicGwJLkxpbm5lcgoKCWxkcgkkbGVuLFtzcCwjMzJdCQlAIHJlLWxvYWQgJGxlbi9lbmQKCWFkZAkkaW5wLCRpbnAsIzE2Cgltb3YJJG5oaSwkWmxsCl9fXwoJJlpzbWFzaCgiY21wXHQkaW5wLCRsZW4iLCJsZHJuZWJcdCRubG8sWyRpbnAsIzE1XSIpOwokY29kZS49PDxfX187CglibmUJLkxvdXRlcgoKCWFkZAlzcCxzcCwjMzYKI2lmIF9fQVJNX0FSQ0hfXz49NQoJbGRtaWEJc3AhLHtyNC1yMTEscGN9CiNlbHNlCglsZG1pYQlzcCEse3I0LXIxMSxscn0KCXRzdAlsciwjMQoJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAoJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKI2VuZGlmCi5zaXplCWdjbV9naGFzaF80Yml0LC4tZ2NtX2doYXNoXzRiaXQKCi5nbG9iYWwJZ2NtX2dtdWx0XzRiaXQKLnR5cGUJZ2NtX2dtdWx0XzRiaXQsJWZ1bmN0aW9uCmdjbV9nbXVsdF80Yml0OgoJc3RtZGIJc3AhLHtyNC1yMTEsbHJ9CglsZHJiCSRubG8sWyRYaSwjMTVdCgliCXJlbV80Yml0X2dldAouTHJlbV80Yml0X2dvdDoKCWFuZAkkbmhpLCRubG8sIzB4ZjAKCWFuZAkkbmxvLCRubG8sIzB4MGYKCW1vdgkkY250LCMxNAoKCWFkZAkkWmhoLCRIdGJsLCRubG8sbHNsIzQKCWxkbWlhCSRaaGgseyRabGwtJFpoaH0JQCBsb2FkIEh0YmxbbmxvXQoJbGRyYgkkbmxvLFskWGksIzE0XQoKCWFkZAkkVGhoLCRIdGJsLCRuaGkKCWFuZAkkbmhpLCRabGwsIzB4ZgkJQCByZW0KCWxkbWlhCSRUaGgseyRUbGwtJFRoaH0JQCBsb2FkIEh0YmxbbmhpXQoJYWRkCSRuaGksJG5oaSwkbmhpCgllb3IJJFpsbCwkVGxsLCRabGwsbHNyIzQKCWxkcmgJJFRsbCxbJHJlbV80Yml0LCRuaGldCUAgcmVtXzRiaXRbcmVtXQoJZW9yCSRabGwsJFpsbCwkWmxoLGxzbCMyOAoJZW9yCSRabGgsJFRsaCwkWmxoLGxzciM0Cgllb3IJJFpsaCwkWmxoLCRaaGwsbHNsIzI4Cgllb3IJJFpobCwkVGhsLCRaaGwsbHNyIzQKCWVvcgkkWmhsLCRaaGwsJFpoaCxsc2wjMjgKCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAoJYW5kCSRuaGksJG5sbywjMHhmMAoJZW9yCSRaaGgsJFpoaCwkVGxsLGxzbCMxNgoJYW5kCSRubG8sJG5sbywjMHgwZgoKLkxvb3A6CglhZGQJJFRoaCwkSHRibCwkbmxvLGxzbCM0CglhbmQJJG5sbywkWmxsLCMweGYJCUAgcmVtCglzdWJzCSRjbnQsJGNudCwjMQoJYWRkCSRubG8sJG5sbywkbmxvCglsZG1pYQkkVGhoLHskVGxsLSRUaGh9CUAgbG9hZCBIdGJsW25sb10KCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAoJZW9yCSRabGwsJFpsbCwkWmxoLGxzbCMyOAoJZW9yCSRabGgsJFRsaCwkWmxoLGxzciM0Cgllb3IJJFpsaCwkWmxoLCRaaGwsbHNsIzI4CglsZHJoCSRUbGwsWyRyZW1fNGJpdCwkbmxvXQlAIHJlbV80Yml0W3JlbV0KCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAoJbGRycGxiCSRubG8sWyRYaSwkY250XQoJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAoJZW9yCSRaaGgsJFRoaCwkWmhoLGxzciM0CgoJYWRkCSRUaGgsJEh0YmwsJG5oaQoJYW5kCSRuaGksJFpsbCwjMHhmCQlAIHJlbQoJZW9yCSRaaGgsJFpoaCwkVGxsLGxzbCMxNglAIF49IHJlbV80Yml0W3JlbV0KCWFkZAkkbmhpLCRuaGksJG5oaQoJbGRtaWEJJFRoaCx7JFRsbC0kVGhofQlAIGxvYWQgSHRibFtuaGldCgllb3IJJFpsbCwkVGxsLCRabGwsbHNyIzQKCWVvcgkkWmxsLCRabGwsJFpsaCxsc2wjMjgKCWVvcgkkWmxoLCRUbGgsJFpsaCxsc3IjNAoJbGRyaAkkVGxsLFskcmVtXzRiaXQsJG5oaV0JQCByZW1fNGJpdFtyZW1dCgllb3IJJFpsaCwkWmxoLCRaaGwsbHNsIzI4Cgllb3IJJFpobCwkVGhsLCRaaGwsbHNyIzQKCWVvcgkkWmhsLCRaaGwsJFpoaCxsc2wjMjgKCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAoJYW5kcGwJJG5oaSwkbmxvLCMweGYwCglhbmRwbAkkbmxvLCRubG8sIzB4MGYKCWVvcgkkWmhoLCRaaGgsJFRsbCxsc2wjMTYJQCBePSByZW1fNGJpdFtyZW1dCglicGwJLkxvb3AKX19fCgkmWnNtYXNoKCk7CiRjb2RlLj08PF9fXzsKI2lmIF9fQVJNX0FSQ0hfXz49NQoJbGRtaWEJc3AhLHtyNC1yMTEscGN9CiNlbHNlCglsZG1pYQlzcCEse3I0LXIxMSxscn0KCXRzdAlsciwjMQoJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAoJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKI2VuZGlmCi5zaXplCWdjbV9nbXVsdF80Yml0LC4tZ2NtX2dtdWx0XzRiaXQKX19fCnsKbXkgJGNudD0kSHRibDsJIyAkSHRibCBpcyB1c2VkIG9uY2UgaW4gdGhlIHZlcnkgYmVnaW5uaW5nCgpteSAoJEhoaSwgJEhsbywgJFpvLCAkVCwgJHhpLCAkbW9kKSA9IG1hcCgiZCRfIiwoMC4uNykpOwpteSAoJFFoaSwgJFFsbywgJFosICAkUiwgJHplcm8sICRRcG9zdCwgJElOKSA9IG1hcCgicSRfIiwoOC4uMTUpKTsKCiMgWjpabyBrZWVwcyAxMjgtYml0IHJlc3VsdCBzaGlmdGVkIGJ5IDEgdG8gdGhlIHJpZ2h0LCB3aXRoIGJvdHRvbSBiaXQKIyBpbiBaby4gT3Igc2hvdWxkIEkgc2F5ICJ0b3AgYml0IiwgYmVjYXVzZSBHSEFTSCBpcyBzcGVjaWZpZWQgaW4KIyByZXZlcnNlIGJpdCBvcmRlcj8gT3RoZXJ3aXNlIHN0cmFpZ2h0Zm9yd2FyZCAxMjgtYnQgSCBieSBvbmUgaW5wdXQKIyBieXRlIG11bHRpcGxpY2F0aW9uIGFuZCBtb2R1bG8tcmVkdWN0aW9uLCB0aW1lcyAxNi4KCnN1YiBEbG8oKSAgIHsgc2hpZnQ9fm18cShbMV0/WzAtOV0pfD8iZCIuKCQxKjIpOiIiOyAgICAgfQpzdWIgRGhpKCkgICB7IHNoaWZ0PX5tfHEoWzFdP1swLTldKXw/ImQiLigkMSoyKzEpOiIiOyAgIH0Kc3ViIFEoKSAgICAgeyBzaGlmdD1+bXxkKFsxLTNdP1swMjQ2OF0pfD8icSIuKCQxLzIpOiIiOyB9CgokY29kZS49PDxfX187CiNpZiBfX0FSTV9BUkNIX18+PTcKLmZwdQluZW9uCgouZ2xvYmFsCWdjbV9nbXVsdF9uZW9uCi50eXBlCWdjbV9nbXVsdF9uZW9uLCVmdW5jdGlvbgouYWxpZ24JNApnY21fZ211bHRfbmVvbjoKCXN1YgkJJEh0YmwsIzE2CQlAIHBvaW50IGF0IEggaW4gR0NNMTI4X0NUWAoJdmxkMS42NAkJYCZEaGkoIiRJTiIpYCxbJFhpLDo2NF0hQCBsb2FkIFhpCgl2bW92LmkzMgkkbW9kLCMweGUxCQlAIG91ciBpcnJlZHVjaWJsZSBwb2x5bm9taWFsCgl2bGQxLjY0CQlgJkRsbygiJElOIilgLFskWGksOjY0XSEKCXZzaHIudTY0CSRtb2QsIzMyCgl2bGRtaWEJCSRIdGJsLHskSGhpLSRIbG99CUAgbG9hZCBICgl2ZW9yCQkkemVybywkemVybwojaWZkZWYgX19BUk1FTF9fCgl2cmV2NjQuOAkkSU4sJElOCiNlbmRpZgoJdmVvcgkJJFFwb3N0LCRRcG9zdAoJdmVvcgkJJFIsJFIKCW1vdgkJJGNudCwjMTYKCXZlb3IJCSRaLCRaCgltb3YJCSRsZW4sIzE2Cgl2ZW9yCQkkWm8sJFpvCgl2ZHVwLjgJCSR4aSxgJkRsbygiJElOIilgWzBdCUAgYnJvYWRjYXN0IGxvd2VzdCBieXRlCgliCQkuTGlubmVyX25lb24KLnNpemUJZ2NtX2dtdWx0X25lb24sLi1nY21fZ211bHRfbmVvbgoKLmdsb2JhbAlnY21fZ2hhc2hfbmVvbgoudHlwZQlnY21fZ2hhc2hfbmVvbiwlZnVuY3Rpb24KLmFsaWduCTQKZ2NtX2doYXNoX25lb246Cgl2bGQxLjY0CQlgJkRoaSgiJFoiKWAsWyRYaSw6NjRdIQlAIGxvYWQgWGkKCXZtb3YuaTMyCSRtb2QsIzB4ZTEJCUAgb3VyIGlycmVkdWNpYmxlIHBvbHlub21pYWwKCXZsZDEuNjQJCWAmRGxvKCIkWiIpYCxbJFhpLDo2NF0hCgl2c2hyLnU2NAkkbW9kLCMzMgoJdmxkbWlhCQkkWGkseyRIaGktJEhsb30JCUAgbG9hZCBICgl2ZW9yCQkkemVybywkemVybwoJbm9wCiNpZmRlZiBfX0FSTUVMX18KCXZyZXY2NC44CSRaLCRaCiNlbmRpZgouTG91dGVyX25lb246Cgl2bGQxLjY0CQlgJkRoaSgkSU4pYCxbJGlucF0hCUAgbG9hZCBpbnAKCXZlb3IJCSRRcG9zdCwkUXBvc3QKCXZsZDEuNjQJCWAmRGxvKCRJTilgLFskaW5wXSEKCXZlb3IJCSRSLCRSCgltb3YJCSRjbnQsIzE2CiNpZmRlZiBfX0FSTUVMX18KCXZyZXY2NC44CSRJTiwkSU4KI2VuZGlmCgl2ZW9yCQkkWm8sJFpvCgl2ZW9yCQkkSU4sJFoJCQlAIGlucF49WGkKCXZlb3IJCSRaLCRaCgl2ZHVwLjgJCSR4aSxgJkRsbygiJElOIilgWzBdCUAgYnJvYWRjYXN0IGxvd2VzdCBieXRlCi5MaW5uZXJfbmVvbjoKCXN1YnMJCSRjbnQsJGNudCwjMQoJdm11bGwucDgJJFFsbywkSGxvLCR4aQkJQCBILmxvt1hpW2ldCgl2bXVsbC5wOAkkUWhpLCRIaGksJHhpCQlAIEguaGm3WGlbaV0KCXZleHQuOAkJJElOLCR6ZXJvLCMxCQlAIElOPj49OAoKCXZlb3IJCSRaLCRRcG9zdAkJQCBtb2R1bG8tc2NoZWR1bGVkIHBhcnQKCXZzaGwuaTY0CWAmRGxvKCIkUiIpYCwjNDgKCXZkdXAuOAkJJHhpLGAmRGxvKCIkSU4iKWBbMF0JQCBicm9hZGNhc3QgbG93ZXN0IGJ5dGUKCXZlb3IJCSRULGAmRGxvKCIkUWxvIilgLGAmRGxvKCIkWiIpYAoKCXZlb3IJCWAmRGhpKCIkWiIpYCxgJkRsbygiJFIiKWAKCXZ1enAuOAkJJFFsbywkUWhpCgl2c2xpLjgJCSRabywkVCwjMQkJQCBjb21wb3NlIHRoZSAiY2FycnkiIGJ5dGUKCXZleHQuOAkJJFosJHplcm8sIzEJCUAgWj4+PTgKCgl2bXVsbC5wOAkkUiwkWm8sJG1vZAkJQCAiY2FycnkitzB4ZTEKCXZzaHIudTgJCSRabywkVCwjNwkJQCBzYXZlIFoncyBib3R0b20gYml0Cgl2ZXh0LjgJCSRRcG9zdCwkUWxvLCR6ZXJvLCMxCUAgUWxvPj49OAoJdmVvcgkJJFosJFFoaQoJYm5lCQkuTGlubmVyX25lb24KCgl2ZW9yCQkkWiwkUXBvc3QJCUAgbW9kdWxvLXNjaGVkdWxlZCBhcnRlZmFjdAoJdnNobC5pNjQJYCZEbG8oIiRSIilgLCM0OAoJdmVvcgkJYCZEaGkoIiRaIilgLGAmRGxvKCIkUiIpYAoKCUAgZmluYWxpemF0aW9uLCBub3JtYWxpemUgWjpabwoJdmFuZAkJJFpvLCRtb2QJCUAgc3VmZmljZXMgdG8gbWFzayB0aGUgYml0Cgl2c2hyLnU2NAlgJkRoaSgmUSgiJFpvIikpYCxgJkRsbygiJFoiKWAsIzYzCgl2c2hsLmk2NAkkWiwjMQoJc3VicwkJJGxlbiwjMTYKCXZvcnIJCSRaLGAmUSgiJFpvIilgCQlAIFo9Wjpabzw8MQoJYm5lCQkuTG91dGVyX25lb24KCiNpZmRlZiBfX0FSTUVMX18KCXZyZXY2NC44CSRaLCRaCiNlbmRpZgoJc3ViCQkkWGksIzE2CQoJdnN0MS42NAkJYCZEaGkoIiRaIilgLFskWGksOjY0XSEJQCB3cml0ZSBvdXQgWGkKCXZzdDEuNjQJCWAmRGxvKCIkWiIpYCxbJFhpLDo2NF0KCglieAlscgouc2l6ZQlnY21fZ2hhc2hfbmVvbiwuLWdjbV9naGFzaF9uZW9uCiNlbmRpZgpfX18KfQokY29kZS49PDxfX187Ci5hc2NpeiAgIkdIQVNIIGZvciBBUk12NC9ORU9OLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgouYWxpZ24gIDIKCiNlbmRpZgpfX18KCiRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOwokY29kZSA9fiBzL1xiYnhccytsclxiLy53b3JkXHQweGUxMmZmZjFlL2dtOwkjIG1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoIC1tYXJjaD1hcm12NApwcmludCAkY29kZTsKY2xvc2UgU1RET1VUOyAjIGVuZm9yY2UgZmx1c2gK