Ly89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8NLy8NLy8gysrKysrKysrKysrKysrKysrKyspUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQ0vLw0vLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UNLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLg0vLw0vLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLw0NLy8gdGVzdCBiaXRzZXQ8Tj46OnJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdCBwb3MpOw0NI2luY2x1ZGUgPGJpdHNldD4NI2luY2x1ZGUgPGNzdGRsaWI+DSNpbmNsdWRlIDxjYXNzZXJ0Pg0NdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+DXN0ZDo6Yml0c2V0PE4+DW1ha2VfYml0c2V0KCkNew0gICAgc3RkOjpiaXRzZXQ8Tj4gdjsNICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBOOyArK2kpDSAgICAgICAgdltpXSA9IHN0YXRpY19jYXN0PGJvb2w+KHN0ZDo6cmFuZCgpICYgMSk7DSAgICByZXR1cm4gdjsNfQ0NdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+DXZvaWQgdGVzdF9pbmRleF9jb25zdCgpDXsNICAgIHN0ZDo6Yml0c2V0PE4+IHYxID0gbWFrZV9iaXRzZXQ8Tj4oKTsNICAgIGlmIChOID4gMCkNICAgIHsNICAgICAgICBhc3NlcnQodjFbTi8yXSA9PSB2MS50ZXN0KE4vMikpOw0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Yml0c2V0PE4+OjpyZWZlcmVuY2UgciA9IHYxW04vMl07DSAgICAgICAgYXNzZXJ0KHIgPT0gdjEudGVzdChOLzIpKTsNICAgICAgICB0eXBlbmFtZSBzdGQ6OmJpdHNldDxOPjo6cmVmZXJlbmNlIHIyID0gdjFbTi8yXTsNICAgICAgICByID0gcjI7DSAgICAgICAgYXNzZXJ0KHIgPT0gdjEudGVzdChOLzIpKTsNICAgICAgICByID0gZmFsc2U7DSAgICAgICAgYXNzZXJ0KHIgPT0gZmFsc2UpOw0gICAgICAgIGFzc2VydCh2MS50ZXN0KE4vMikgPT0gZmFsc2UpOw0gICAgICAgIHIgPSB0cnVlOw0gICAgICAgIGFzc2VydChyID09IHRydWUpOw0gICAgICAgIGFzc2VydCh2MS50ZXN0KE4vMikgPT0gdHJ1ZSk7DSAgICAgICAgYm9vbCBiID0gfnI7DSAgICAgICAgYXNzZXJ0KHIgPT0gdHJ1ZSk7DSAgICAgICAgYXNzZXJ0KHYxLnRlc3QoTi8yKSA9PSB0cnVlKTsNICAgICAgICBhc3NlcnQoYiA9PSBmYWxzZSk7DSAgICAgICAgci5mbGlwKCk7DSAgICAgICAgYXNzZXJ0KHIgPT0gZmFsc2UpOw0gICAgICAgIGFzc2VydCh2MS50ZXN0KE4vMikgPT0gZmFsc2UpOw0gICAgfQ19DQ1pbnQgbWFpbigpDXsNICAgIHRlc3RfaW5kZXhfY29uc3Q8MD4oKTsNICAgIHRlc3RfaW5kZXhfY29uc3Q8MT4oKTsNICAgIHRlc3RfaW5kZXhfY29uc3Q8MzE+KCk7DSAgICB0ZXN0X2luZGV4X2NvbnN0PDMyPigpOw0gICAgdGVzdF9pbmRleF9jb25zdDwzMz4oKTsNICAgIHRlc3RfaW5kZXhfY29uc3Q8NjM+KCk7DSAgICB0ZXN0X2luZGV4X2NvbnN0PDY0PigpOw0gICAgdGVzdF9pbmRleF9jb25zdDw2NT4oKTsNICAgIHRlc3RfaW5kZXhfY29uc3Q8MTAwMD4oKTsNfQ0=