IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgU0hBMjU2IGJsb2NrIHRyYW5zZm9ybSBmb3IgeDg2LiBTZXB0ZW1iZXIgMjAwNy4KIwojIFBlcmZvcm1hbmNlIGluIGNsb2NrIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUgKGxlc3MgaXMgYmV0dGVyKToKIwojCQlQZW50aXVtCVBJSUkJUDQJQU1EIEs4CUNvcmUyCiMgZ2NjCQk0NgkzNgk0MQkyNwkyNgojIGljYwkJNTcJMzMJMzgJMjUJMjMJCiMgeDg2IGFzbQk0MAkzMAkzMwkyMAkxOAojIHg4Nl82NCBhc20oKikJLQktCTIxCTE2CTE2CiMKIyAoKikgeDg2XzY0IGFzc2VtYmxlciBwZXJmb3JtYW5jZSBpcyBwcmVzZW50ZWQgZm9yIHJlZmVyZW5jZQojICAgICBwdXJwb3Nlcy4KIwojIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG92ZXIgY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGUgdmFyaWVzIGZyb20KIyAxMCUgdG8gNDAlIFtzZWUgYWJvdmVdLiBOb3QgdmVyeSBpbXByZXNzaXZlIG9uIHNvbWUgtS1hcmNocywgYnV0CiMgaXQncyA1IHRpbWVzIHNtYWxsZXIgYW5kIG9wdGltaXppZXMgYW1vdW50IG9mIHdyaXRlcy4KCiQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CnB1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOwpyZXF1aXJlICJ4ODZhc20ucGwiOwoKJmFzbV9pbml0KCRBUkdWWzBdLCJzaGE1MTItNTg2LnBsIiwkQVJHVlskI0FSR1ZdIGVxICIzODYiKTsKCiRBPSJlYXgiOwokRT0iZWR4IjsKJFQ9ImVieCI7CiRBb2ZmPSZEV1AoMCwiZXNwIik7CiRCb2ZmPSZEV1AoNCwiZXNwIik7CiRDb2ZmPSZEV1AoOCwiZXNwIik7CiREb2ZmPSZEV1AoMTIsImVzcCIpOwokRW9mZj0mRFdQKDE2LCJlc3AiKTsKJEZvZmY9JkRXUCgyMCwiZXNwIik7CiRHb2ZmPSZEV1AoMjQsImVzcCIpOwokSG9mZj0mRFdQKDI4LCJlc3AiKTsKJFhvZmY9JkRXUCgzMiwiZXNwIik7CiRLMjU2PSJlYnAiOwoKc3ViIEJPRFlfMDBfMTUoKSB7CiAgICBteSAkaW5fMTZfNjM9c2hpZnQ7CgoJJm1vdgkoImVjeCIsJEUpOwoJICZhZGQJKCRULCJlZGkiKQkJCWlmICgkaW5fMTZfNjMpOwkjIFQgKz0gc2lnbWExKFhbLTJdKQoJJnJvcgkoImVjeCIsMjUtMTEpOwoJICZtb3YJKCJlc2kiLCRGb2ZmKTsKCSZ4b3IJKCJlY3giLCRFKTsKCSZyb3IJKCJlY3giLDExLTYpOwoJICZtb3YJKCZEV1AoNCooOCsxNSksImVzcCIpLCRUKQlpZiAoJGluXzE2XzYzKTsJIyBzYXZlIFhbMF0KCSZ4b3IJKCJlY3giLCRFKTsKCSZyb3IJKCJlY3giLDYpOwkjIFNpZ21hMShlKQoJICZtb3YJKCJlZGkiLCRHb2ZmKTsKCSZhZGQJKCRULCJlY3giKTsJIyBUICs9IFNpZ21hMShlKQoKCSZ4b3IJKCJlc2kiLCJlZGkiKTsKCSAmbW92CSgkRW9mZiwkRSk7CSMgbW9kdWxvLXNjaGVkdWxlZAoJICZtb3YJKCJlY3giLCRBKTsKCSZhbmQJKCJlc2kiLCRFKTsKCSAmbW92CSgkRSwkRG9mZik7CSMgZSBiZWNvbWVzIGQsIHdoaWNoIGlzIGUgaW4gbmV4dCBpdGVyYXRpb24KCSZ4b3IJKCJlc2kiLCJlZGkiKTsJIyBDaChlLGYsZykKCSAmbW92CSgiZWRpIiwkQSk7CgkmYWRkCSgkVCwiZXNpIik7CSMgVCArPSBDaChlLGYsZykKCgkmcm9yCSgiZWN4IiwyMi0xMyk7CgkgJmFkZAkoJFQsJEhvZmYpOwkjIFQgKz0gaAoJJnhvcgkoImVjeCIsJEEpOwoJJnJvcgkoImVjeCIsMTMtMik7CgkgJm1vdgkoImVzaSIsJEJvZmYpOwoJJnhvcgkoImVjeCIsJEEpOwoJJnJvcgkoImVjeCIsMik7CSMgU2lnbWEwKGEpCgkgJmFkZAkoJEUsJFQpOwkjIGQgKz0gVAoJICZtb3YJKCJlZGkiLCRDb2ZmKTsKCgkmYWRkCSgkVCwiZWN4Iik7CSMgVCArPSBTaWdtYTAoYSkKCSAmbW92CSgkQW9mZiwkQSk7CSMgbW9kdWxvLXNjaGVkdWxlZAoKCSZtb3YJKCJlY3giLCRBKTsKCSAmc3ViCSgiZXNwIiw0KTsKCSZvcgkoJEEsImVzaSIpOwkjIGEgYmVjb21lcyBoLCB3aGljaCBpcyBhIGluIG5leHQgaXRlcmF0aW9uCgkmYW5kCSgiZWN4IiwiZXNpIik7CgkmYW5kCSgkQSwiZWRpIik7CgkgJm1vdgkoImVzaSIsJkRXUCgwLCRLMjU2KSk7Cgkmb3IJKCRBLCJlY3giKTsJIyBoPU1haihhLGIsYykKCgkmYWRkCSgkSzI1Niw0KTsKCSZhZGQJKCRBLCRUKTsJIyBoICs9IFQKCSAmbW92CSgkVCwmRFdQKDQqKDgrMTUrMTYtMSksImVzcCIpKQlpZiAoJGluXzE2XzYzKTsJIyBwcmVsb2FkIFQKCSZhZGQJKCRFLCJlc2kiKTsJIyBkICs9IEsyNTZbaV0KCSZhZGQJKCRBLCJlc2kiKTsJIyBoICs9IEsyNTZbaV0KfQoKJmZ1bmN0aW9uX2JlZ2luKCJzaGEyNTZfYmxvY2tfZGF0YV9vcmRlciIpOwoJJm1vdgkoImVzaSIsd3BhcmFtKDApKTsJIyBjdHgKCSZtb3YJKCJlZGkiLHdwYXJhbSgxKSk7CSMgaW5wCgkmbW92CSgiZWF4Iix3cGFyYW0oMikpOwkjIG51bQoJJm1vdgkoImVieCIsImVzcCIpOwkJIyBzYXZlZCBzcAoKCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsJIyBtYWtlIGl0IFBJQyEKJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoJEsyNTYpOwoJJmxlYQkoJEsyNTYsJkRXUCgmbGFiZWwoIksyNTYiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkSzI1NikpOwoKCSZzdWIJKCJlc3AiLDE2KTsKCSZhbmQJKCJlc3AiLC02NCk7CgoJJnNobAkoImVheCIsNik7CgkmYWRkCSgiZWF4IiwiZWRpIik7CgkmbW92CSgmRFdQKDAsImVzcCIpLCJlc2kiKTsJIyBjdHgKCSZtb3YJKCZEV1AoNCwiZXNwIiksImVkaSIpOwkjIGlucAoJJm1vdgkoJkRXUCg4LCJlc3AiKSwiZWF4Iik7CSMgaW5wK251bSoxMjgKCSZtb3YJKCZEV1AoMTIsImVzcCIpLCJlYngiKTsJIyBzYXZlZCBzcAoKJnNldF9sYWJlbCgibG9vcCIsMTYpOwogICAgIyBjb3B5IGlucHV0IGJsb2NrIHRvIHN0YWNrIHJldmVyc2luZyBieXRlIGFuZCBkd29yZCBvcmRlcgogICAgZm9yKCRpPTA7JGk8NDskaSsrKSB7CgkmbW92CSgiZWF4IiwmRFdQKCRpKjE2KzAsImVkaSIpKTsKCSZtb3YJKCJlYngiLCZEV1AoJGkqMTYrNCwiZWRpIikpOwoJJm1vdgkoImVjeCIsJkRXUCgkaSoxNis4LCJlZGkiKSk7CgkmbW92CSgiZWR4IiwmRFdQKCRpKjE2KzEyLCJlZGkiKSk7CgkmYnN3YXAJKCJlYXgiKTsKCSZic3dhcAkoImVieCIpOwoJJmJzd2FwCSgiZWN4Iik7CgkmYnN3YXAJKCJlZHgiKTsKCSZwdXNoCSgiZWF4Iik7CgkmcHVzaAkoImVieCIpOwoJJnB1c2gJKCJlY3giKTsKCSZwdXNoCSgiZWR4Iik7CiAgICB9CgkmYWRkCSgiZWRpIiw2NCk7Cgkmc3ViCSgiZXNwIiw0KjgpOwkJIyBwbGFjZSBmb3IgQSxCLEMsRCxFLEYsRyxICgkmbW92CSgmRFdQKDQqKDgrMTYpKzQsImVzcCIpLCJlZGkiKTsKCgkjIGNvcHkgY3R4LT5oWzAtN10gdG8gQSxCLEMsRCxFLEYsRyxIIG9uIHN0YWNrCgkmbW92CSgkQSwmRFdQKDAsImVzaSIpKTsKCSZtb3YJKCJlYngiLCZEV1AoNCwiZXNpIikpOwoJJm1vdgkoImVjeCIsJkRXUCg4LCJlc2kiKSk7CgkmbW92CSgiZWRpIiwmRFdQKDEyLCJlc2kiKSk7CgkjICZtb3YJKCRBb2ZmLCRBKTsKCSZtb3YJKCRCb2ZmLCJlYngiKTsKCSZtb3YJKCRDb2ZmLCJlY3giKTsKCSZtb3YJKCREb2ZmLCJlZGkiKTsKCSZtb3YJKCRFLCZEV1AoMTYsImVzaSIpKTsJCgkmbW92CSgiZWJ4IiwmRFdQKDIwLCJlc2kiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDI0LCJlc2kiKSk7CgkmbW92CSgiZWRpIiwmRFdQKDI4LCJlc2kiKSk7CgkjICZtb3YJKCRFb2ZmLCRFKTsKCSZtb3YJKCRGb2ZmLCJlYngiKTsKCSZtb3YJKCRHb2ZmLCJlY3giKTsKCSZtb3YJKCRIb2ZmLCJlZGkiKTsKCiZzZXRfbGFiZWwoIjAwXzE1IiwxNik7CgkmbW92CSgkVCwmRFdQKDQqKDgrMTUpLCJlc3AiKSk7CgoJJkJPRFlfMDBfMTUoKTsKCgkmY21wCSgiZXNpIiwweGMxOWJmMTc0KTsKCSZqbmUJKCZsYWJlbCgiMDBfMTUiKSk7CgoJJm1vdgkoJFQsJkRXUCg0Kig4KzE1KzE2LTEpLCJlc3AiKSk7CSMgcHJlbG9hZGVkIGluIEJPRFlfMDBfMTUoMSkKJnNldF9sYWJlbCgiMTZfNjMiLDE2KTsKCSZtb3YJKCJlc2kiLCRUKTsKCSAmbW92CSgiZWN4IiwmRFdQKDQqKDgrMTUrMTYtMTQpLCJlc3AiKSk7Cgkmcm9yCSgiZXNpIiwxOC03KTsKCSAmbW92CSgiZWRpIiwiZWN4Iik7CgkmeG9yCSgiZXNpIiwkVCk7Cgkmcm9yCSgiZXNpIiw3KTsKCSZzaHIJKCRULDMpOwoKCSZyb3IJKCJlZGkiLDE5LTE3KTsKCSAmeG9yCSgkVCwiZXNpIik7CQkJIyBUID0gc2lnbWEwKFhbLTE1XSkKCSZ4b3IJKCJlZGkiLCJlY3giKTsKCSZyb3IJKCJlZGkiLDE3KTsKCSZzaHIJKCJlY3giLDEwKTsKCSAmYWRkCSgkVCwmRFdQKDQqKDgrMTUrMTYpLCJlc3AiKSk7CSMgVCArPSBYWy0xNl0KCSZ4b3IJKCJlZGkiLCJlY3giKTsJCQkjIHNpZ21hMShYWy0yXSkKCgkgJmFkZAkoJFQsJkRXUCg0Kig4KzE1KzE2LTkpLCJlc3AiKSk7CSMgVCArPSBYWy03XQoJIyAmYWRkCSgkVCwiZWRpIik7CQkJIyBUICs9IHNpZ21hMShYWy0yXSkKCSMgJm1vdgkoJkRXUCg0Kig4KzE1KSwiZXNwIiksJFQpOwkjIHNhdmUgWFswXQoKCSZCT0RZXzAwXzE1KDEpOwoKCSZjbXAJKCJlc2kiLDB4YzY3MTc4ZjIpOwoJJmpuZQkoJmxhYmVsKCIxNl82MyIpKTsKCgkmbW92CSgiZXNpIiwmRFdQKDQqKDgrMTYrNjQpKzAsImVzcCIpKTsjY3R4CgkjICZtb3YJKCRBLCRBb2ZmKTsKCSZtb3YJKCJlYngiLCRCb2ZmKTsKCSZtb3YJKCJlY3giLCRDb2ZmKTsKCSZtb3YJKCJlZGkiLCREb2ZmKTsKCSZhZGQJKCRBLCZEV1AoMCwiZXNpIikpOwoJJmFkZAkoImVieCIsJkRXUCg0LCJlc2kiKSk7CgkmYWRkCSgiZWN4IiwmRFdQKDgsImVzaSIpKTsKCSZhZGQJKCJlZGkiLCZEV1AoMTIsImVzaSIpKTsKCSZtb3YJKCZEV1AoMCwiZXNpIiksJEEpOwoJJm1vdgkoJkRXUCg0LCJlc2kiKSwiZWJ4Iik7CgkmbW92CSgmRFdQKDgsImVzaSIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMTIsImVzaSIpLCJlZGkiKTsKCSMgJm1vdgkoJEUsJEVvZmYpOwoJJm1vdgkoImVheCIsJEZvZmYpOwoJJm1vdgkoImVieCIsJEdvZmYpOwoJJm1vdgkoImVjeCIsJEhvZmYpOwoJJm1vdgkoImVkaSIsJkRXUCg0Kig4KzE2KzY0KSs0LCJlc3AiKSk7I2lucAoJJmFkZAkoJEUsJkRXUCgxNiwiZXNpIikpOwoJJmFkZAkoImVheCIsJkRXUCgyMCwiZXNpIikpOwoJJmFkZAkoImVieCIsJkRXUCgyNCwiZXNpIikpOwoJJmFkZAkoImVjeCIsJkRXUCgyOCwiZXNpIikpOwoJJm1vdgkoJkRXUCgxNiwiZXNpIiksJEUpOwoJJm1vdgkoJkRXUCgyMCwiZXNpIiksImVheCIpOwoJJm1vdgkoJkRXUCgyNCwiZXNpIiksImVieCIpOwoJJm1vdgkoJkRXUCgyOCwiZXNpIiksImVjeCIpOwoKCSZhZGQJKCJlc3AiLDQqKDgrMTYrNjQpKTsJCSMgZGVzdHJveSBmcmFtZQoJJnN1YgkoJEsyNTYsNCo2NCk7CQkJIyByZXdpbmQgSwoKCSZjbXAJKCJlZGkiLCZEV1AoOCwiZXNwIikpOwkJIyBhcmUgd2UgZG9uZSB5ZXQ/CgkmamIJKCZsYWJlbCgibG9vcCIpKTsKCgkmbW92CSgiZXNwIiwmRFdQKDEyLCJlc3AiKSk7CQkjIHJlc3RvcmUgc3AKJmZ1bmN0aW9uX2VuZF9BKCk7Cgomc2V0X2xhYmVsKCJLMjU2Iiw2NCk7CSMgWWVzISBJIGtlZXAgaXQgaW4gdGhlIGNvZGUgc2VnbWVudCEKCSZkYXRhX3dvcmQoMHg0MjhhMmY5OCwweDcxMzc0NDkxLDB4YjVjMGZiY2YsMHhlOWI1ZGJhNSk7CgkmZGF0YV93b3JkKDB4Mzk1NmMyNWIsMHg1OWYxMTFmMSwweDkyM2Y4MmE0LDB4YWIxYzVlZDUpOwoJJmRhdGFfd29yZCgweGQ4MDdhYTk4LDB4MTI4MzViMDEsMHgyNDMxODViZSwweDU1MGM3ZGMzKTsKCSZkYXRhX3dvcmQoMHg3MmJlNWQ3NCwweDgwZGViMWZlLDB4OWJkYzA2YTcsMHhjMTliZjE3NCk7CgkmZGF0YV93b3JkKDB4ZTQ5YjY5YzEsMHhlZmJlNDc4NiwweDBmYzE5ZGM2LDB4MjQwY2ExY2MpOwoJJmRhdGFfd29yZCgweDJkZTkyYzZmLDB4NGE3NDg0YWEsMHg1Y2IwYTlkYywweDc2Zjk4OGRhKTsKCSZkYXRhX3dvcmQoMHg5ODNlNTE1MiwweGE4MzFjNjZkLDB4YjAwMzI3YzgsMHhiZjU5N2ZjNyk7CgkmZGF0YV93b3JkKDB4YzZlMDBiZjMsMHhkNWE3OTE0NywweDA2Y2E2MzUxLDB4MTQyOTI5NjcpOwoJJmRhdGFfd29yZCgweDI3YjcwYTg1LDB4MmUxYjIxMzgsMHg0ZDJjNmRmYywweDUzMzgwZDEzKTsKCSZkYXRhX3dvcmQoMHg2NTBhNzM1NCwweDc2NmEwYWJiLDB4ODFjMmM5MmUsMHg5MjcyMmM4NSk7CgkmZGF0YV93b3JkKDB4YTJiZmU4YTEsMHhhODFhNjY0YiwweGMyNGI4YjcwLDB4Yzc2YzUxYTMpOwoJJmRhdGFfd29yZCgweGQxOTJlODE5LDB4ZDY5OTA2MjQsMHhmNDBlMzU4NSwweDEwNmFhMDcwKTsKCSZkYXRhX3dvcmQoMHgxOWE0YzExNiwweDFlMzc2YzA4LDB4Mjc0ODc3NGMsMHgzNGIwYmNiNSk7CgkmZGF0YV93b3JkKDB4MzkxYzBjYjMsMHg0ZWQ4YWE0YSwweDViOWNjYTRmLDB4NjgyZTZmZjMpOwoJJmRhdGFfd29yZCgweDc0OGY4MmVlLDB4NzhhNTYzNmYsMHg4NGM4NzgxNCwweDhjYzcwMjA4KTsKCSZkYXRhX3dvcmQoMHg5MGJlZmZmYSwweGE0NTA2Y2ViLDB4YmVmOWEzZjcsMHhjNjcxNzhmMik7CiZmdW5jdGlvbl9lbmRfQigic2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIiKTsKJmFzY2l6KCJTSEEyNTYgYmxvY2sgdHJhbnNmb3JtIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKCiZhc21fZmluaXNoKCk7Cg==