Ly89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLy8KLy8gysrKysrKysrKysrKysrKysrKyspUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQovLwovLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgovLwovLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwoKLy8gPGFsZ29yaXRobT4KCi8vIHRlbXBsYXRlPFNodWZmbGVJdGVyYXRvciBJdGVyPiAKLy8gICBJdGVyCi8vICAgcm90YXRlKEl0ZXIgZmlyc3QsIEl0ZXIgbWlkZGxlLCBJdGVyIGxhc3QpOwoKI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNhc3NlcnQ+CiNpZmRlZiBfTElCQ1BQX01PVkUKI2luY2x1ZGUgPG1lbW9yeT4KI2VuZGlmCgojaW5jbHVkZSAiLi4vLi4vaXRlcmF0b3JzLmgiCgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcj4Kdm9pZAp0ZXN0KCkKewogICAgaW50IGlhW10gPSB7MH07CiAgICBjb25zdCB1bnNpZ25lZCBzYSA9IHNpemVvZihpYSkvc2l6ZW9mKGlhWzBdKTsKICAgIEl0ZXIgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWEpLCBJdGVyKGlhKSwgSXRlcihpYSkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWEpOwogICAgYXNzZXJ0KGlhWzBdID09IDApOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWEpLCBJdGVyKGlhKSwgSXRlcihpYStzYSkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWErc2EpOwogICAgYXNzZXJ0KGlhWzBdID09IDApOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWEpLCBJdGVyKGlhK3NhKSwgSXRlcihpYStzYSkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWEpOwogICAgYXNzZXJ0KGlhWzBdID09IDApOwoKICAgIGludCBpYltdID0gezAsIDF9OwogICAgY29uc3QgdW5zaWduZWQgc2IgPSBzaXplb2YoaWIpL3NpemVvZihpYlswXSk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpYiksIEl0ZXIoaWIpLCBJdGVyKGliK3NiKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpYitzYik7CiAgICBhc3NlcnQoaWJbMF0gPT0gMCk7CiAgICBhc3NlcnQoaWJbMV0gPT0gMSk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpYiksIEl0ZXIoaWIrMSksIEl0ZXIoaWIrc2IpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGliKzEpOwogICAgYXNzZXJ0KGliWzBdID09IDEpOwogICAgYXNzZXJ0KGliWzFdID09IDApOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWIpLCBJdGVyKGliK3NiKSwgSXRlcihpYitzYikpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWIpOwogICAgYXNzZXJ0KGliWzBdID09IDEpOwogICAgYXNzZXJ0KGliWzFdID09IDApOwoKICAgIGludCBpY1tdID0gezAsIDEsIDJ9OwogICAgY29uc3QgdW5zaWduZWQgc2MgPSBzaXplb2YoaWMpL3NpemVvZihpY1swXSk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpYyksIEl0ZXIoaWMpLCBJdGVyKGljK3NjKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpYytzYyk7CiAgICBhc3NlcnQoaWNbMF0gPT0gMCk7CiAgICBhc3NlcnQoaWNbMV0gPT0gMSk7CiAgICBhc3NlcnQoaWNbMl0gPT0gMik7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpYyksIEl0ZXIoaWMrMSksIEl0ZXIoaWMrc2MpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGljKzIpOwogICAgYXNzZXJ0KGljWzBdID09IDEpOwogICAgYXNzZXJ0KGljWzFdID09IDIpOwogICAgYXNzZXJ0KGljWzJdID09IDApOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWMpLCBJdGVyKGljKzIpLCBJdGVyKGljK3NjKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpYysxKTsKICAgIGFzc2VydChpY1swXSA9PSAwKTsKICAgIGFzc2VydChpY1sxXSA9PSAxKTsKICAgIGFzc2VydChpY1syXSA9PSAyKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGljKSwgSXRlcihpYytzYyksIEl0ZXIoaWMrc2MpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGljKTsKICAgIGFzc2VydChpY1swXSA9PSAwKTsKICAgIGFzc2VydChpY1sxXSA9PSAxKTsKICAgIGFzc2VydChpY1syXSA9PSAyKTsKCiAgICBpbnQgaWRbXSA9IHswLCAxLCAyLCAzfTsKICAgIGNvbnN0IHVuc2lnbmVkIHNkID0gc2l6ZW9mKGlkKS9zaXplb2YoaWRbMF0pOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWQpLCBJdGVyKGlkKSwgSXRlcihpZCtzZCkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWQrc2QpOwogICAgYXNzZXJ0KGlkWzBdID09IDApOwogICAgYXNzZXJ0KGlkWzFdID09IDEpOwogICAgYXNzZXJ0KGlkWzJdID09IDIpOwogICAgYXNzZXJ0KGlkWzNdID09IDMpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWQpLCBJdGVyKGlkKzEpLCBJdGVyKGlkK3NkKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZCszKTsKICAgIGFzc2VydChpZFswXSA9PSAxKTsKICAgIGFzc2VydChpZFsxXSA9PSAyKTsKICAgIGFzc2VydChpZFsyXSA9PSAzKTsKICAgIGFzc2VydChpZFszXSA9PSAwKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGlkKSwgSXRlcihpZCsyKSwgSXRlcihpZCtzZCkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWQrMik7CiAgICBhc3NlcnQoaWRbMF0gPT0gMyk7CiAgICBhc3NlcnQoaWRbMV0gPT0gMCk7CiAgICBhc3NlcnQoaWRbMl0gPT0gMSk7CiAgICBhc3NlcnQoaWRbM10gPT0gMik7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZCksIEl0ZXIoaWQrMyksIEl0ZXIoaWQrc2QpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGlkKzEpOwogICAgYXNzZXJ0KGlkWzBdID09IDIpOwogICAgYXNzZXJ0KGlkWzFdID09IDMpOwogICAgYXNzZXJ0KGlkWzJdID09IDApOwogICAgYXNzZXJ0KGlkWzNdID09IDEpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWQpLCBJdGVyKGlkK3NkKSwgSXRlcihpZCtzZCkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWQpOwogICAgYXNzZXJ0KGlkWzBdID09IDIpOwogICAgYXNzZXJ0KGlkWzFdID09IDMpOwogICAgYXNzZXJ0KGlkWzJdID09IDApOwogICAgYXNzZXJ0KGlkWzNdID09IDEpOwoKICAgIGludCBpZVtdID0gezAsIDEsIDIsIDMsIDR9OwogICAgY29uc3QgdW5zaWduZWQgc2UgPSBzaXplb2YoaWUpL3NpemVvZihpZVswXSk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZSksIEl0ZXIoaWUpLCBJdGVyKGllK3NlKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZStzZSk7CiAgICBhc3NlcnQoaWVbMF0gPT0gMCk7CiAgICBhc3NlcnQoaWVbMV0gPT0gMSk7CiAgICBhc3NlcnQoaWVbMl0gPT0gMik7CiAgICBhc3NlcnQoaWVbM10gPT0gMyk7CiAgICBhc3NlcnQoaWVbNF0gPT0gNCk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZSksIEl0ZXIoaWUrMSksIEl0ZXIoaWUrc2UpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGllKzQpOwogICAgYXNzZXJ0KGllWzBdID09IDEpOwogICAgYXNzZXJ0KGllWzFdID09IDIpOwogICAgYXNzZXJ0KGllWzJdID09IDMpOwogICAgYXNzZXJ0KGllWzNdID09IDQpOwogICAgYXNzZXJ0KGllWzRdID09IDApOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWUpLCBJdGVyKGllKzIpLCBJdGVyKGllK3NlKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZSszKTsKICAgIGFzc2VydChpZVswXSA9PSAzKTsKICAgIGFzc2VydChpZVsxXSA9PSA0KTsKICAgIGFzc2VydChpZVsyXSA9PSAwKTsKICAgIGFzc2VydChpZVszXSA9PSAxKTsKICAgIGFzc2VydChpZVs0XSA9PSAyKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGllKSwgSXRlcihpZSszKSwgSXRlcihpZStzZSkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWUrMik7CiAgICBhc3NlcnQoaWVbMF0gPT0gMSk7CiAgICBhc3NlcnQoaWVbMV0gPT0gMik7CiAgICBhc3NlcnQoaWVbMl0gPT0gMyk7CiAgICBhc3NlcnQoaWVbM10gPT0gNCk7CiAgICBhc3NlcnQoaWVbNF0gPT0gMCk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZSksIEl0ZXIoaWUrNCksIEl0ZXIoaWUrc2UpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGllKzEpOwogICAgYXNzZXJ0KGllWzBdID09IDApOwogICAgYXNzZXJ0KGllWzFdID09IDEpOwogICAgYXNzZXJ0KGllWzJdID09IDIpOwogICAgYXNzZXJ0KGllWzNdID09IDMpOwogICAgYXNzZXJ0KGllWzRdID09IDQpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWUpLCBJdGVyKGllK3NlKSwgSXRlcihpZStzZSkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWUpOwogICAgYXNzZXJ0KGllWzBdID09IDApOwogICAgYXNzZXJ0KGllWzFdID09IDEpOwogICAgYXNzZXJ0KGllWzJdID09IDIpOwogICAgYXNzZXJ0KGllWzNdID09IDMpOwogICAgYXNzZXJ0KGllWzRdID09IDQpOwoKICAgIGludCBpZ1tdID0gezAsIDEsIDIsIDMsIDQsIDV9OwogICAgY29uc3QgdW5zaWduZWQgc2cgPSBzaXplb2YoaWcpL3NpemVvZihpZ1swXSk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZyksIEl0ZXIoaWcpLCBJdGVyKGlnK3NnKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZytzZyk7CiAgICBhc3NlcnQoaWdbMF0gPT0gMCk7CiAgICBhc3NlcnQoaWdbMV0gPT0gMSk7CiAgICBhc3NlcnQoaWdbMl0gPT0gMik7CiAgICBhc3NlcnQoaWdbM10gPT0gMyk7CiAgICBhc3NlcnQoaWdbNF0gPT0gNCk7CiAgICBhc3NlcnQoaWdbNV0gPT0gNSk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZyksIEl0ZXIoaWcrMSksIEl0ZXIoaWcrc2cpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGlnKzUpOwogICAgYXNzZXJ0KGlnWzBdID09IDEpOwogICAgYXNzZXJ0KGlnWzFdID09IDIpOwogICAgYXNzZXJ0KGlnWzJdID09IDMpOwogICAgYXNzZXJ0KGlnWzNdID09IDQpOwogICAgYXNzZXJ0KGlnWzRdID09IDUpOwogICAgYXNzZXJ0KGlnWzVdID09IDApOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWcpLCBJdGVyKGlnKzIpLCBJdGVyKGlnK3NnKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZys0KTsKICAgIGFzc2VydChpZ1swXSA9PSAzKTsKICAgIGFzc2VydChpZ1sxXSA9PSA0KTsKICAgIGFzc2VydChpZ1syXSA9PSA1KTsKICAgIGFzc2VydChpZ1szXSA9PSAwKTsKICAgIGFzc2VydChpZ1s0XSA9PSAxKTsKICAgIGFzc2VydChpZ1s1XSA9PSAyKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGlnKSwgSXRlcihpZyszKSwgSXRlcihpZytzZykpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWcrMyk7CiAgICBhc3NlcnQoaWdbMF0gPT0gMCk7CiAgICBhc3NlcnQoaWdbMV0gPT0gMSk7CiAgICBhc3NlcnQoaWdbMl0gPT0gMik7CiAgICBhc3NlcnQoaWdbM10gPT0gMyk7CiAgICBhc3NlcnQoaWdbNF0gPT0gNCk7CiAgICBhc3NlcnQoaWdbNV0gPT0gNSk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZyksIEl0ZXIoaWcrNCksIEl0ZXIoaWcrc2cpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGlnKzIpOwogICAgYXNzZXJ0KGlnWzBdID09IDQpOwogICAgYXNzZXJ0KGlnWzFdID09IDUpOwogICAgYXNzZXJ0KGlnWzJdID09IDApOwogICAgYXNzZXJ0KGlnWzNdID09IDEpOwogICAgYXNzZXJ0KGlnWzRdID09IDIpOwogICAgYXNzZXJ0KGlnWzVdID09IDMpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWcpLCBJdGVyKGlnKzUpLCBJdGVyKGlnK3NnKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZysxKTsKICAgIGFzc2VydChpZ1swXSA9PSAzKTsKICAgIGFzc2VydChpZ1sxXSA9PSA0KTsKICAgIGFzc2VydChpZ1syXSA9PSA1KTsKICAgIGFzc2VydChpZ1szXSA9PSAwKTsKICAgIGFzc2VydChpZ1s0XSA9PSAxKTsKICAgIGFzc2VydChpZ1s1XSA9PSAyKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGlnKSwgSXRlcihpZytzZyksIEl0ZXIoaWcrc2cpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGlnKTsKICAgIGFzc2VydChpZ1swXSA9PSAzKTsKICAgIGFzc2VydChpZ1sxXSA9PSA0KTsKICAgIGFzc2VydChpZ1syXSA9PSA1KTsKICAgIGFzc2VydChpZ1szXSA9PSAwKTsKICAgIGFzc2VydChpZ1s0XSA9PSAxKTsKICAgIGFzc2VydChpZ1s1XSA9PSAyKTsKfQoKI2lmZGVmIF9MSUJDUFBfTU9WRQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXI+CnZvaWQKdGVzdDEoKQp7CiAgICBzdGQ6OnVuaXF1ZV9wdHI8aW50PiBpYVsxXTsKICAgIGNvbnN0IHVuc2lnbmVkIHNhID0gc2l6ZW9mKGlhKS9zaXplb2YoaWFbMF0pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzYTsgKytpKQogICAgICAgIGlhW2ldLnJlc2V0KG5ldyBpbnQoaSkpOwogICAgSXRlciByID0gc3RkOjpyb3RhdGUoSXRlcihpYSksIEl0ZXIoaWEpLCBJdGVyKGlhKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpYSk7CiAgICBhc3NlcnQoKmlhWzBdID09IDApOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWEpLCBJdGVyKGlhKSwgSXRlcihpYStzYSkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWErc2EpOwogICAgYXNzZXJ0KCppYVswXSA9PSAwKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGlhKSwgSXRlcihpYStzYSksIEl0ZXIoaWErc2EpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGlhKTsKICAgIGFzc2VydCgqaWFbMF0gPT0gMCk7CgogICAgc3RkOjp1bmlxdWVfcHRyPGludD4gaWJbMl07CiAgICBjb25zdCB1bnNpZ25lZCBzYiA9IHNpemVvZihpYikvc2l6ZW9mKGliWzBdKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2I7ICsraSkKICAgICAgICBpYltpXS5yZXNldChuZXcgaW50KGkpKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGliKSwgSXRlcihpYiksIEl0ZXIoaWIrc2IpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGliK3NiKTsKICAgIGFzc2VydCgqaWJbMF0gPT0gMCk7CiAgICBhc3NlcnQoKmliWzFdID09IDEpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWIpLCBJdGVyKGliKzEpLCBJdGVyKGliK3NiKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpYisxKTsKICAgIGFzc2VydCgqaWJbMF0gPT0gMSk7CiAgICBhc3NlcnQoKmliWzFdID09IDApOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWIpLCBJdGVyKGliK3NiKSwgSXRlcihpYitzYikpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWIpOwogICAgYXNzZXJ0KCppYlswXSA9PSAxKTsKICAgIGFzc2VydCgqaWJbMV0gPT0gMCk7CgogICAgc3RkOjp1bmlxdWVfcHRyPGludD4gaWNbM107CiAgICBjb25zdCB1bnNpZ25lZCBzYyA9IHNpemVvZihpYykvc2l6ZW9mKGljWzBdKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2M7ICsraSkKICAgICAgICBpY1tpXS5yZXNldChuZXcgaW50KGkpKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGljKSwgSXRlcihpYyksIEl0ZXIoaWMrc2MpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGljK3NjKTsKICAgIGFzc2VydCgqaWNbMF0gPT0gMCk7CiAgICBhc3NlcnQoKmljWzFdID09IDEpOwogICAgYXNzZXJ0KCppY1syXSA9PSAyKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGljKSwgSXRlcihpYysxKSwgSXRlcihpYytzYykpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWMrMik7CiAgICBhc3NlcnQoKmljWzBdID09IDEpOwogICAgYXNzZXJ0KCppY1sxXSA9PSAyKTsKICAgIGFzc2VydCgqaWNbMl0gPT0gMCk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpYyksIEl0ZXIoaWMrMiksIEl0ZXIoaWMrc2MpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGljKzEpOwogICAgYXNzZXJ0KCppY1swXSA9PSAwKTsKICAgIGFzc2VydCgqaWNbMV0gPT0gMSk7CiAgICBhc3NlcnQoKmljWzJdID09IDIpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWMpLCBJdGVyKGljK3NjKSwgSXRlcihpYytzYykpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWMpOwogICAgYXNzZXJ0KCppY1swXSA9PSAwKTsKICAgIGFzc2VydCgqaWNbMV0gPT0gMSk7CiAgICBhc3NlcnQoKmljWzJdID09IDIpOwoKICAgIHN0ZDo6dW5pcXVlX3B0cjxpbnQ+IGlkWzRdOwogICAgY29uc3QgdW5zaWduZWQgc2QgPSBzaXplb2YoaWQpL3NpemVvZihpZFswXSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNkOyArK2kpCiAgICAgICAgaWRbaV0ucmVzZXQobmV3IGludChpKSk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZCksIEl0ZXIoaWQpLCBJdGVyKGlkK3NkKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZCtzZCk7CiAgICBhc3NlcnQoKmlkWzBdID09IDApOwogICAgYXNzZXJ0KCppZFsxXSA9PSAxKTsKICAgIGFzc2VydCgqaWRbMl0gPT0gMik7CiAgICBhc3NlcnQoKmlkWzNdID09IDMpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWQpLCBJdGVyKGlkKzEpLCBJdGVyKGlkK3NkKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZCszKTsKICAgIGFzc2VydCgqaWRbMF0gPT0gMSk7CiAgICBhc3NlcnQoKmlkWzFdID09IDIpOwogICAgYXNzZXJ0KCppZFsyXSA9PSAzKTsKICAgIGFzc2VydCgqaWRbM10gPT0gMCk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZCksIEl0ZXIoaWQrMiksIEl0ZXIoaWQrc2QpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGlkKzIpOwogICAgYXNzZXJ0KCppZFswXSA9PSAzKTsKICAgIGFzc2VydCgqaWRbMV0gPT0gMCk7CiAgICBhc3NlcnQoKmlkWzJdID09IDEpOwogICAgYXNzZXJ0KCppZFszXSA9PSAyKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGlkKSwgSXRlcihpZCszKSwgSXRlcihpZCtzZCkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWQrMSk7CiAgICBhc3NlcnQoKmlkWzBdID09IDIpOwogICAgYXNzZXJ0KCppZFsxXSA9PSAzKTsKICAgIGFzc2VydCgqaWRbMl0gPT0gMCk7CiAgICBhc3NlcnQoKmlkWzNdID09IDEpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWQpLCBJdGVyKGlkK3NkKSwgSXRlcihpZCtzZCkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWQpOwogICAgYXNzZXJ0KCppZFswXSA9PSAyKTsKICAgIGFzc2VydCgqaWRbMV0gPT0gMyk7CiAgICBhc3NlcnQoKmlkWzJdID09IDApOwogICAgYXNzZXJ0KCppZFszXSA9PSAxKTsKCiAgICBzdGQ6OnVuaXF1ZV9wdHI8aW50PiBpZVs1XTsKICAgIGNvbnN0IHVuc2lnbmVkIHNlID0gc2l6ZW9mKGllKS9zaXplb2YoaWVbMF0pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZTsgKytpKQogICAgICAgIGllW2ldLnJlc2V0KG5ldyBpbnQoaSkpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWUpLCBJdGVyKGllKSwgSXRlcihpZStzZSkpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWUrc2UpOwogICAgYXNzZXJ0KCppZVswXSA9PSAwKTsKICAgIGFzc2VydCgqaWVbMV0gPT0gMSk7CiAgICBhc3NlcnQoKmllWzJdID09IDIpOwogICAgYXNzZXJ0KCppZVszXSA9PSAzKTsKICAgIGFzc2VydCgqaWVbNF0gPT0gNCk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZSksIEl0ZXIoaWUrMSksIEl0ZXIoaWUrc2UpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGllKzQpOwogICAgYXNzZXJ0KCppZVswXSA9PSAxKTsKICAgIGFzc2VydCgqaWVbMV0gPT0gMik7CiAgICBhc3NlcnQoKmllWzJdID09IDMpOwogICAgYXNzZXJ0KCppZVszXSA9PSA0KTsKICAgIGFzc2VydCgqaWVbNF0gPT0gMCk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZSksIEl0ZXIoaWUrMiksIEl0ZXIoaWUrc2UpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGllKzMpOwogICAgYXNzZXJ0KCppZVswXSA9PSAzKTsKICAgIGFzc2VydCgqaWVbMV0gPT0gNCk7CiAgICBhc3NlcnQoKmllWzJdID09IDApOwogICAgYXNzZXJ0KCppZVszXSA9PSAxKTsKICAgIGFzc2VydCgqaWVbNF0gPT0gMik7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZSksIEl0ZXIoaWUrMyksIEl0ZXIoaWUrc2UpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGllKzIpOwogICAgYXNzZXJ0KCppZVswXSA9PSAxKTsKICAgIGFzc2VydCgqaWVbMV0gPT0gMik7CiAgICBhc3NlcnQoKmllWzJdID09IDMpOwogICAgYXNzZXJ0KCppZVszXSA9PSA0KTsKICAgIGFzc2VydCgqaWVbNF0gPT0gMCk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZSksIEl0ZXIoaWUrNCksIEl0ZXIoaWUrc2UpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGllKzEpOwogICAgYXNzZXJ0KCppZVswXSA9PSAwKTsKICAgIGFzc2VydCgqaWVbMV0gPT0gMSk7CiAgICBhc3NlcnQoKmllWzJdID09IDIpOwogICAgYXNzZXJ0KCppZVszXSA9PSAzKTsKICAgIGFzc2VydCgqaWVbNF0gPT0gNCk7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZSksIEl0ZXIoaWUrc2UpLCBJdGVyKGllK3NlKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZSk7CiAgICBhc3NlcnQoKmllWzBdID09IDApOwogICAgYXNzZXJ0KCppZVsxXSA9PSAxKTsKICAgIGFzc2VydCgqaWVbMl0gPT0gMik7CiAgICBhc3NlcnQoKmllWzNdID09IDMpOwogICAgYXNzZXJ0KCppZVs0XSA9PSA0KTsKCiAgICBzdGQ6OnVuaXF1ZV9wdHI8aW50PiBpZ1s2XTsKICAgIGNvbnN0IHVuc2lnbmVkIHNnID0gc2l6ZW9mKGlnKS9zaXplb2YoaWdbMF0pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZzsgKytpKQogICAgICAgIGlnW2ldLnJlc2V0KG5ldyBpbnQoaSkpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWcpLCBJdGVyKGlnKSwgSXRlcihpZytzZykpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWcrc2cpOwogICAgYXNzZXJ0KCppZ1swXSA9PSAwKTsKICAgIGFzc2VydCgqaWdbMV0gPT0gMSk7CiAgICBhc3NlcnQoKmlnWzJdID09IDIpOwogICAgYXNzZXJ0KCppZ1szXSA9PSAzKTsKICAgIGFzc2VydCgqaWdbNF0gPT0gNCk7CiAgICBhc3NlcnQoKmlnWzVdID09IDUpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWcpLCBJdGVyKGlnKzEpLCBJdGVyKGlnK3NnKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZys1KTsKICAgIGFzc2VydCgqaWdbMF0gPT0gMSk7CiAgICBhc3NlcnQoKmlnWzFdID09IDIpOwogICAgYXNzZXJ0KCppZ1syXSA9PSAzKTsKICAgIGFzc2VydCgqaWdbM10gPT0gNCk7CiAgICBhc3NlcnQoKmlnWzRdID09IDUpOwogICAgYXNzZXJ0KCppZ1s1XSA9PSAwKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGlnKSwgSXRlcihpZysyKSwgSXRlcihpZytzZykpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWcrNCk7CiAgICBhc3NlcnQoKmlnWzBdID09IDMpOwogICAgYXNzZXJ0KCppZ1sxXSA9PSA0KTsKICAgIGFzc2VydCgqaWdbMl0gPT0gNSk7CiAgICBhc3NlcnQoKmlnWzNdID09IDApOwogICAgYXNzZXJ0KCppZ1s0XSA9PSAxKTsKICAgIGFzc2VydCgqaWdbNV0gPT0gMik7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZyksIEl0ZXIoaWcrMyksIEl0ZXIoaWcrc2cpKTsKICAgIGFzc2VydChiYXNlKHIpID09IGlnKzMpOwogICAgYXNzZXJ0KCppZ1swXSA9PSAwKTsKICAgIGFzc2VydCgqaWdbMV0gPT0gMSk7CiAgICBhc3NlcnQoKmlnWzJdID09IDIpOwogICAgYXNzZXJ0KCppZ1szXSA9PSAzKTsKICAgIGFzc2VydCgqaWdbNF0gPT0gNCk7CiAgICBhc3NlcnQoKmlnWzVdID09IDUpOwogICAgciA9IHN0ZDo6cm90YXRlKEl0ZXIoaWcpLCBJdGVyKGlnKzQpLCBJdGVyKGlnK3NnKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZysyKTsKICAgIGFzc2VydCgqaWdbMF0gPT0gNCk7CiAgICBhc3NlcnQoKmlnWzFdID09IDUpOwogICAgYXNzZXJ0KCppZ1syXSA9PSAwKTsKICAgIGFzc2VydCgqaWdbM10gPT0gMSk7CiAgICBhc3NlcnQoKmlnWzRdID09IDIpOwogICAgYXNzZXJ0KCppZ1s1XSA9PSAzKTsKICAgIHIgPSBzdGQ6OnJvdGF0ZShJdGVyKGlnKSwgSXRlcihpZys1KSwgSXRlcihpZytzZykpOwogICAgYXNzZXJ0KGJhc2UocikgPT0gaWcrMSk7CiAgICBhc3NlcnQoKmlnWzBdID09IDMpOwogICAgYXNzZXJ0KCppZ1sxXSA9PSA0KTsKICAgIGFzc2VydCgqaWdbMl0gPT0gNSk7CiAgICBhc3NlcnQoKmlnWzNdID09IDApOwogICAgYXNzZXJ0KCppZ1s0XSA9PSAxKTsKICAgIGFzc2VydCgqaWdbNV0gPT0gMik7CiAgICByID0gc3RkOjpyb3RhdGUoSXRlcihpZyksIEl0ZXIoaWcrc2cpLCBJdGVyKGlnK3NnKSk7CiAgICBhc3NlcnQoYmFzZShyKSA9PSBpZyk7CiAgICBhc3NlcnQoKmlnWzBdID09IDMpOwogICAgYXNzZXJ0KCppZ1sxXSA9PSA0KTsKICAgIGFzc2VydCgqaWdbMl0gPT0gNSk7CiAgICBhc3NlcnQoKmlnWzNdID09IDApOwogICAgYXNzZXJ0KCppZ1s0XSA9PSAxKTsKICAgIGFzc2VydCgqaWdbNV0gPT0gMik7Cn0KCiNlbmRpZgoKaW50IG1haW4oKQp7CiAgICB0ZXN0PGZvcndhcmRfaXRlcmF0b3I8aW50Kj4gPigpOwogICAgdGVzdDxiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPGludCo+ID4oKTsKICAgIHRlc3Q8cmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxpbnQqPiA+KCk7CiAgICB0ZXN0PGludCo+KCk7CgojaWZkZWYgX0xJQkNQUF9NT1ZFCgogICAgdGVzdDE8Zm9yd2FyZF9pdGVyYXRvcjxzdGQ6OnVuaXF1ZV9wdHI8aW50Pio+ID4oKTsKICAgIHRlc3QxPGJpZGlyZWN0aW9uYWxfaXRlcmF0b3I8c3RkOjp1bmlxdWVfcHRyPGludD4qPiA+KCk7CiAgICB0ZXN0MTxyYW5kb21fYWNjZXNzX2l0ZXJhdG9yPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+Kj4gPigpOwogICAgdGVzdDE8c3RkOjp1bmlxdWVfcHRyPGludD4qPigpOwoKI2VuZGlmCn0K