IyMjIHVWaXNpb24yIFByb2plY3QsIChDKSBLZWlsIFNvZnR3YXJlDQojIyMgRG8gbm90IG1vZGlmeSAhDQoNClRhcmdldCAoRnJlZVJUT1NfRGVtbyksIDB4MDAwNCAvLyBUb29sczogJ0FSTS1BRFMnDQoNCkdyb3VwIChEZW1vX1NvdXJjZSkNCkdyb3VwIChMaWJyYXJpZXMpDQpHcm91cCAoUlRPU19Tb3VyY2UpDQpHcm91cCAodUlQX1NvdXJjZSkNCg0KRmlsZSAxLDEsPC4uXENvbW1vblxNaW5pbWFsXEJsb2NrUS5jPjxCbG9ja1EuYz4NCkZpbGUgMSwxLDwuLlxDb21tb25cTWluaW1hbFxibG9ja3RpbS5jPjxibG9ja3RpbS5jPg0KRmlsZSAxLDEsPC4uXENvbW1vblxNaW5pbWFsXGRlYXRoLmM+PGRlYXRoLmM+DQpGaWxlIDEsMSw8Li5cQ29tbW9uXE1pbmltYWxcaW50ZWdlci5jPjxpbnRlZ2VyLmM+DQpGaWxlIDEsMSw8LlxtYWluLmM+PG1haW4uYz4NCkZpbGUgMSwxLDwuXFBhclRlc3RcUGFyVGVzdC5jPjxQYXJUZXN0LmM+DQpGaWxlIDEsMSw8Li5cQ29tbW9uXE1pbmltYWxcUG9sbFEuYz48UG9sbFEuYz4NCkZpbGUgMSwxLDwuLlxDb21tb25cTWluaW1hbFxzZW10ZXN0LmM+PHNlbXRlc3QuYz4NCkZpbGUgMSwyLDwuXHN0YXJ0dXBfcnZtZGsuUz48c3RhcnR1cF9ydm1kay5TPg0KRmlsZSAxLDEsPC5cdGltZXJ0ZXN0LmM+PHRpbWVydGVzdC5jPg0KRmlsZSAxLDUsPC5cRnJlZVJUT1NDb25maWcuaD48RnJlZVJUT1NDb25maWcuaD4NCkZpbGUgMSwxLDwuLlxDb21tb25cTWluaW1hbFxHZW5RVGVzdC5jPjxHZW5RVGVzdC5jPg0KRmlsZSAxLDEsPC4uXENvbW1vblxNaW5pbWFsXFFQZWVrLmM+PFFQZWVrLmM+DQpGaWxlIDEsMSw8LlxJbnRRdWV1ZVRpbWVyLmM+PEludFF1ZXVlVGltZXIuYz4NCkZpbGUgMSwxLDwuLlxDb21tb25cTWluaW1hbFxJbnRRdWV1ZS5jPjxJbnRRdWV1ZS5jPg0KRmlsZSAxLDEsPC4uXENvbW1vblxNaW5pbWFsXHJlY211dGV4LmM+PHJlY211dGV4LmM+DQpGaWxlIDIsMSw8LlxyaXQxMjh4OTZ4NC5jPjxyaXQxMjh4OTZ4NC5jPg0KRmlsZSAyLDEsPC5cb3NyYW0xMjh4NjR4NC5jPjxvc3JhbTEyOHg2NHg0LmM+DQpGaWxlIDIsNCw8Li5cQ29tbW9uXGRyaXZlcnNcTHVtaW5hcnlNaWNyb1xLZWlsXGRyaXZlcmxpYi5saWI+PGRyaXZlcmxpYi5saWI+DQpGaWxlIDIsMSw8Llxmb3JtaWtlMTI4eDEyOHgxNi5jPjxmb3JtaWtlMTI4eDEyOHgxNi5jPg0KRmlsZSAyLDQsPC4uXENvbW1vblxkcml2ZXJzXEx1bWluYXJ5TWljcm9cS2VpbFxncmxpYi5saWI+PGdybGliLmxpYj4NCkZpbGUgMywxLDwuLlwuLlxTb3VyY2VcdGFza3MuYz48dGFza3MuYz4NCkZpbGUgMywxLDwuLlwuLlxTb3VyY2VcbGlzdC5jPjxsaXN0LmM+DQpGaWxlIDMsMSw8Li5cLi5cU291cmNlXHF1ZXVlLmM+PHF1ZXVlLmM+DQpGaWxlIDMsMSw8Li5cLi5cU291cmNlXHBvcnRhYmxlXFJWRFNcQVJNX0NNM1xwb3J0LmM+PHBvcnQuYz4NCkZpbGUgMywxLDwuLlwuLlxTb3VyY2VccG9ydGFibGVcTWVtTWFuZ1xoZWFwXzIuYz48aGVhcF8yLmM+DQpGaWxlIDQsMSw8Llx3ZWJzZXJ2ZXJcdUlQX1Rhc2suYz48dUlQX1Rhc2suYz4NCkZpbGUgNCwxLDwuXHdlYnNlcnZlclxlbWFjLmM+PGVtYWMuYz4NCkZpbGUgNCwxLDwuXHdlYnNlcnZlclxodHRwZC5jPjxodHRwZC5jPg0KRmlsZSA0LDEsPC5cd2Vic2VydmVyXGh0dHBkLWNnaS5jPjxodHRwZC1jZ2kuYz4NCkZpbGUgNCwxLDwuXHdlYnNlcnZlclxodHRwZC1mcy5jPjxodHRwZC1mcy5jPg0KRmlsZSA0LDEsPC5cd2Vic2VydmVyXGh0dHAtc3RyaW5ncy5jPjxodHRwLXN0cmluZ3MuYz4NCkZpbGUgNCwxLDwuLlxDb21tb25cZXRoZXJuZXRcdUlQXHVpcC0xLjBcdWlwXHVpcF9hcnAuYz48dWlwX2FycC5jPg0KRmlsZSA0LDEsPC4uXENvbW1vblxldGhlcm5ldFx1SVBcdWlwLTEuMFx1aXBccHNvY2suYz48cHNvY2suYz4NCkZpbGUgNCwxLDwuLlxDb21tb25cZXRoZXJuZXRcdUlQXHVpcC0xLjBcdWlwXHRpbWVyLmM+PHRpbWVyLmM+DQpGaWxlIDQsMSw8Li5cQ29tbW9uXGV0aGVybmV0XHVJUFx1aXAtMS4wXHVpcFx1aXAuYz48dWlwLmM+DQoNCg0KT3B0aW9ucyAxLDAsMCAgLy8gVGFyZ2V0ICdGcmVlUlRPU19EZW1vJw0KIERldmljZSAoTE0zUzg5NjIpDQogVmVuZG9yIChMdW1pbmFyeSBNaWNybykNCiBDcHUgKElSQU0oMHgyMDAwMDAwMC0weDIwMDBGRkZGKSBJUk9NKDAtMHgzRkZGRikgQ0xPQ0soODAwMDAwMCkgQ1BVVFlQRSgiQ29ydGV4LU0zIikpDQogRmxhc2hVdCAoKQ0KIFN0dXBGICgiU1RBUlRVUFxMdW1pbmFyeVxTdGFydHVwLnMiICgiTHVtaW5hcnkgU3RhcnR1cCBDb2RlIikpDQogRmxhc2hEUiAoVUwyQ00zKC1VVTAxMDFMNUUgLU8xNCAtUzAgLUMwIC1OMDAoIkFSTSBDb3J0ZXgtTTMiKSAtRDAwKDFCQTAwNDc3KSAtTDAwKDQpIC1GTzcgLUZEMjAwMDAwMDAgLUZDODAwIC1GTjEgLUZGMExNM1NfMjU2IC1GUzAwIC1GTDA0MDAwMCkpDQogRGV2SUQgKDQyODUpDQogUmdmIChMTTNTeHh4LkgpDQogTWVtICgpDQogQyAoKQ0KIEEgKCkNCiBSTCAoKQ0KIE9IICgpDQogREJDX0lGWCAoKQ0KIERCQ19DTVMgKCkNCiBEQkNfQU1TICgpDQogREJDX0xNUyAoKQ0KIFVzZUVudj0wDQogRW52QmluICgpDQogRW52SW5jICgpDQogRW52TGliICgpDQogRW52UmVnICj/THVtaW5hcnlcKQ0KIE9yZ1JlZyAo/0x1bWluYXJ5XCkNCiBUZ1N0YXQ9MTYNCiBPdXREaXIgKC5ccnZtZGtcKQ0KIE91dE5hbWUgKFJUT1NEZW1vKQ0KIEdlbkFwcD0xDQogR2VuTGliPTANCiBHZW5IZXg9MA0KIERlYnVnPTENCiBCcm93c2U9MQ0KIExzdERpciAoLlxydm1ka1wpDQogSGV4U2VsPTENCiBNRzMySz0wDQogVEdNT1JFPTANCiBSdW5Vc3IgMCAxIDxmcm9tZWxmIC0tYmluIC0tb3V0cHV0IC5ccnZtZGtcUlRPU0RlbW8uYmluIC5ccnZtZGtcUlRPU0RlbW8uYXhmPg0KIFJ1blVzciAxIDAgPD4NCiBCcnVuVXNyIDAgMCA8Pg0KIEJydW5Vc3IgMSAwIDw+DQogQ3J1blVzciAwIDAgPD4NCiBDcnVuVXNyIDEgMCA8Pg0KIFNWQ1NJRCA8Pg0KIEdMRkxBR1M9MTc5MA0KIEFEU0ZMR0EgeyAxNiwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBBQ1BVVFlQICgiQ29ydGV4LU0zIikNCiBSVkRFViAoKQ0KIEFEU1RGTEdBIHsgMCwxMiwwLDIsOTksMCwwLDY2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBPQ01BRFNPQ00geyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogT0NNQURTSVJBTSB7IDAsMCwwLDAsMzIsMCwwLDEsMCB9DQogT0NNQURTSVJPTSB7IDEsMCwwLDAsMCwwLDAsNCwwIH0NCiBPQ01BRFNYUkFNIHsgMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIE9DUl9SVkNUIHsgMSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCw0LDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzMiwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBSVl9TVEFWRUMgKCkNCiBBRFNDQ0ZMRyB7IDUsMzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEFEU0NNSVNDICgtLWRpYWdfc3VwcHJlc3MgMTkxLDU1MCw1MTMsMTY3LDE3NywxNDQpDQogQURTQ0RFRk4gKFJWRFNfQVJNQ00zX0xNM1MxMDIsICJQQUNLX1NUUlVDVF9FTkQ9IiwiQUxJR05fU1RSVUNUX0VORD0iKQ0KIEFEU0NVREVGICgpDQogQURTQ0lOQ0QgKC47LlwuLlxDb21tb25cZHJpdmVyc1xMdW1pbmFyeU1pY3JvOy4uXC4uXFNvdXJjZVxwb3J0YWJsZVxSVkRTXEFSTV9DTTM7Li5cLi5cU291cmNlXGluY2x1ZGU7Li5cQ29tbW9uXGluY2x1ZGU7Li5cQ29tbW9uXGV0aGVybmV0XHVJUFx1aXAtMS4wXHVpcDsuXHdlYnNlcnZlcikNCiBBRFNBU0ZMRyB7IDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogQURTQU1JU0MgKCkNCiBBRFNBREVGTiAoKQ0KIEFEU0FVREVGICgpDQogQURTQUlOQ0QgKCkNCiBQcm9wRmxkIHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBJbmNCbGQ9MQ0KIEFsd2F5c0J1aWxkPTANCiBHZW5Bc209MA0KIEFzbUFzbT0wDQogUHVibGljc09ubHk9MA0KIFN0b3BDb2RlPTMNCiBDdXN0QXJncyAoKQ0KIExpYk1vZHMgKCkNCiBBRFNMREZHIHsgMTcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogQURTTERUQSAoMHgwMDAwMDAwMCkNCiBBRFNMRERBICgweDIwMDAwMDAwKQ0KIEFEU0xEU0MgKCkNCiBBRFNMRElCICgpDQogQURTTERJQyAoKQ0KIEFEU0xETUMgKC0tZW50cnkgUmVzZXRfSGFuZGxlcikNCiBBRFNMRElGICgpDQogQURTTEREVyAoKQ0KICBPUFRETCAoU0FSTUNNMy5ETEwpKCkoRExNLkRMTCkoLXBMTTNTODk2MikoU0FSTUNNMy5ETEwpKCkoVExNLkRMTCkoLXBMTTNTODk2MikNCiAgT1BUREJHIDQ4MTI2LDQsKCkoKSgpKCkoKSgpKCkoKSgpKCkgKEJJTlxsbWlkay1hZ2RpLmRsbCkoKSgpKCkNCiBGTEFTSDEgeyAxLDAsMCwwLDEsMCwwLDAsMywxNiwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBGTEFTSDIgKEJJTlxsbWlkay1hZ2RpLmRsbCkNCiBGTEFTSDMgKCIiICgpKQ0KIEZMQVNINCAoKQ0KRW5kT3B0DQoNCg==