Ly89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLy8KLy8gysrKysrKysrKysrKysrKysrKyspUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQovLwovLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgovLwovLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwoKLy8gPHN0cmluZz4KCi8vIGludCBjb21wYXJlKGNvbnN0IGNoYXJUICpzKSBjb25zdDsKCiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxjYXNzZXJ0PgoKaW50IHNpZ24oaW50IHgpCnsKICAgIGlmICh4ID09IDApCiAgICAgICAgcmV0dXJuIDA7CiAgICBpZiAoeCA8IDApCiAgICAgICAgcmV0dXJuIC0xOwogICAgcmV0dXJuIDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBTPgp2b2lkCnRlc3QoY29uc3QgUyYgcywgY29uc3QgdHlwZW5hbWUgUzo6dmFsdWVfdHlwZSogc3RyLCBpbnQgeCkKewogICAgYXNzZXJ0KHNpZ24ocy5jb21wYXJlKHN0cikpID09IHNpZ24oeCkpOwp9Cgp0eXBlZGVmIHN0ZDo6c3RyaW5nIFM7CgppbnQgbWFpbigpCnsKICAgIHRlc3QoUygiIiksICIiLCAwKTsKICAgIHRlc3QoUygiIiksICJhYmNkZSIsIC01KTsKICAgIHRlc3QoUygiIiksICJhYmNkZWZnaGlqIiwgLTEwKTsKICAgIHRlc3QoUygiIiksICJhYmNkZWZnaGlqa2xtbm9wcXJzdCIsIC0yMCk7CiAgICB0ZXN0KFMoImFiY2RlIiksICIiLCA1KTsKICAgIHRlc3QoUygiYWJjZGUiKSwgImFiY2RlIiwgMCk7CiAgICB0ZXN0KFMoImFiY2RlIiksICJhYmNkZWZnaGlqIiwgLTUpOwogICAgdGVzdChTKCJhYmNkZSIpLCAiYWJjZGVmZ2hpamtsbW5vcHFyc3QiLCAtMTUpOwogICAgdGVzdChTKCJhYmNkZWZnaGlqIiksICIiLCAxMCk7CiAgICB0ZXN0KFMoImFiY2RlZmdoaWoiKSwgImFiY2RlIiwgNSk7CiAgICB0ZXN0KFMoImFiY2RlZmdoaWoiKSwgImFiY2RlZmdoaWoiLCAwKTsKICAgIHRlc3QoUygiYWJjZGVmZ2hpaiIpLCAiYWJjZGVmZ2hpamtsbW5vcHFyc3QiLCAtMTApOwogICAgdGVzdChTKCJhYmNkZWZnaGlqa2xtbm9wcXJzdCIpLCAiIiwgMjApOwogICAgdGVzdChTKCJhYmNkZWZnaGlqa2xtbm9wcXJzdCIpLCAiYWJjZGUiLCAxNSk7CiAgICB0ZXN0KFMoImFiY2RlZmdoaWprbG1ub3BxcnN0IiksICJhYmNkZWZnaGlqIiwgMTApOwogICAgdGVzdChTKCJhYmNkZWZnaGlqa2xtbm9wcXJzdCIpLCAiYWJjZGVmZ2hpamtsbW5vcHFyc3QiLCAwKTsKfQo=