I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KCiNpZiBkZWZpbmVkKE9QRU5TU0xfWDg2XzY0KSAmJiAhZGVmaW5lZChPUEVOU1NMX1dJTkRPV1MpCgojaW5jbHVkZSAiLi4vaW50ZXJuYWwuaCIKCi8qIHg4Nl82NCBCSUdOVU0gYWNjZWxlcmF0b3IgdmVyc2lvbiAwLjEsIERlY2VtYmVyIDIwMDIuCiAqCiAqIEltcGxlbWVudGVkIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKICogcHJvamVjdC4KICoKICogUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlCiAqIGdyYW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuU1NMIGxpY2Vuc2UuIFdhcnJhbnR5IG9mIGFueSBraW5kIGlzCiAqIGRpc2NsYWltZWQuCiAqCiAqIFEuIFZlcnNpb24gMC4xPyBJdCBkb2Vzbid0IHNvdW5kIGxpa2UgQW5keSwgaGUgdXNlZCB0byBhc3NpZ24gcmVhbAogKiAgICB2ZXJzaW9ucywgbGlrZSAxLjAuLi4KICogQS4gV2VsbCwgdGhhdCdzIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGJhc2ljYWxseSBhIHF1aWNrLW4tZGlydHkKICogICAgcHJvb2Ytb2YtY29uY2VwdCBoYWNrLiBBcyB5b3UgY2FuIHNlZSBpdCdzIGltcGxlbWVudGVkIHdpdGgKICogICAgaW5saW5lIGFzc2VtYmxlciwgd2hpY2ggbWVhbnMgdGhhdCB5b3UncmUgYm91bmQgdG8gR0NDIGFuZCB0aGF0CiAqICAgIHRoZXJlIG1pZ2h0IGJlIGVub3VnaCByb29tIGZvciBmdXJ0aGVyIGltcHJvdmVtZW50LgogKgogKiBRLiBXaHkgaW5saW5lIGFzc2VtYmxlcj8KICogQS4geDg2XzY0IGZlYXR1cmVzIG93biBBQkkgd2hpY2ggSSdtIG5vdCBmYW1pbGlhciB3aXRoLiBUaGlzIGlzCiAqICAgIHdoeSBJIGRlY2lkZWQgdG8gbGV0IHRoZSBjb21waWxlciB0YWtlIGNhcmUgb2Ygc3Vicm91dGluZQogKiAgICBwcm9sb2d1ZS9lcGlsb2d1ZSBhcyB3ZWxsIGFzIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEZvciByZWZlcmVuY2UuCiAqICAgIFdpbjY0IGltcGxlbWVudHMgZGlmZmVyZW50IEFCSSBmb3IgQU1ENjQsIGRpZmZlcmVudCBmcm9tIExpbnV4LgogKgogKiBRLiBIb3cgbXVjaCBmYXN0ZXIgZG9lcyBpdCBnZXQ/CiAqIEEuICdhcHBzL29wZW5zc2wgc3BlZWQgcnNhIGRzYScgb3V0cHV0IHdpdGggbm8tYXNtOgogKgogKgkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKICoJcnNhICA1MTIgYml0cyAgIDAuMDAwNnMgICAwLjAwMDFzICAgMTY4My44ICAxODQ1Ni4yCiAqCXJzYSAxMDI0IGJpdHMgICAwLjAwMjhzICAgMC4wMDAycyAgICAzNTYuMCAgIDY0MDcuMAogKglyc2EgMjA0OCBiaXRzICAgMC4wMTcycyAgIDAuMDAwNXMgICAgIDU4LjAgICAxOTU3LjgKICoJcnNhIDQwOTYgYml0cyAgIDAuMTE1NXMgICAwLjAwMThzICAgICAgOC43ICAgIDU1NS42CiAqCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKglkc2EgIDUxMiBiaXRzICAgMC4wMDA1cyAgIDAuMDAwNnMgICAyMTAwLjggICAxNzY4LjMKICoJZHNhIDEwMjQgYml0cyAgIDAuMDAxNHMgICAwLjAwMThzICAgIDY5Mi4zICAgIDU1OS4yCiAqCWRzYSAyMDQ4IGJpdHMgICAwLjAwNDlzICAgMC4wMDYxcyAgICAyMDQuNyAgICAxNjUuMAogKgogKiAgICAnYXBwcy9vcGVuc3NsIHNwZWVkIHJzYSBkc2EnIG91dHB1dCB3aXRoIHRoaXMgbW9kdWxlOgogKgogKgkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKICoJcnNhICA1MTIgYml0cyAgIDAuMDAwNHMgICAwLjAwMDBzICAgMjc2Ny4xICAzMzI5Ny45CiAqCXJzYSAxMDI0IGJpdHMgICAwLjAwMTJzICAgMC4wMDAxcyAgICA4NjcuNCAgMTQ2NzQuNwogKglyc2EgMjA0OCBiaXRzICAgMC4wMDYxcyAgIDAuMDAwMnMgICAgMTY0LjAgICA1MjcwLjAKICoJcnNhIDQwOTYgYml0cyAgIDAuMDM4NHMgICAwLjAwMDZzICAgICAyNi4xICAgMTY1MC44CiAqCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKglkc2EgIDUxMiBiaXRzICAgMC4wMDAycyAgIDAuMDAwM3MgICA0NDQyLjIgICAzNzg2LjMKICoJZHNhIDEwMjQgYml0cyAgIDAuMDAwNXMgICAwLjAwMDdzICAgMTgzNS4xICAgMTQ5Ny40CiAqCWRzYSAyMDQ4IGJpdHMgICAwLjAwMTZzICAgMC4wMDIwcyAgICA2MjAuNCAgICA1MDQuNgogKgogKiAgICBGb3IgdGhlIHJlZmVyZW5jZS4gSUEtMzIgYXNzZW1ibGVyIGltcGxlbWVudGF0aW9uIHBlcmZvcm1zCiAqICAgIHZlcnkgbXVjaCBsaWtlIDY0LWJpdCBjb2RlIGNvbXBpbGVkIHdpdGggbm8tYXNtIG9uIHRoZSBzYW1lCiAqICAgIG1hY2hpbmUuCiAqLwoKIC8qIFRPRE8oZGF2aWRiZW4pOiBHZXQgdGhpcyBmaWxlIHdvcmtpbmcgb24gV2luZG93cyB4NjQuICovCgojdW5kZWYgbXVsCiN1bmRlZiBtdWxfYWRkCgojZGVmaW5lIGFzbSBfX2FzbV9fCgovKgogKiAibSIoYSksICIrbSIocikJaXMgdGhlIHdheSB0byBmYXZvciBEaXJlY3RQYXRoILUtY29kZTsKICogImciKDApCQlsZXQgdGhlIGNvbXBpbGVyIHRvIGRlY2lkZSB3aGVyZSBkb2VzIGl0CiAqCQkJd2FudCB0byBrZWVwIHRoZSB2YWx1ZSBvZiB6ZXJvOwogKi8KI2RlZmluZSBtdWxfYWRkKHIsIGEsIHdvcmQsIGNhcnJ5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgcmVnaXN0ZXIgQk5fVUxPTkcgaGlnaCwgbG93OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGFzbSgibXVscSAlMyIgOiAiPWEiKGxvdyksICI9ZCIoaGlnaCkgOiAiYSIod29yZCksICJtIihhKSA6ICJjYyIpOyBcCiAgICBhc20oImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogIityIihjYXJyeSksICIrZCIoaGlnaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJhIihsb3cpLCAiZyIoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgYXNtKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICIrbSIociksICIrZCIoaGlnaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiciIoY2FycnkpLCAiZyIoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGNhcnJ5ID0gaGlnaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgfSB3aGlsZSAoMCkKCiNkZWZpbmUgbXVsKHIsIGEsIHdvcmQsIGNhcnJ5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHJlZ2lzdGVyIEJOX1VMT05HIGhpZ2gsIGxvdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBhc20oIm11bHEgJTMiIDogIj1hIihsb3cpLCAiPWQiKGhpZ2gpIDogImEiKHdvcmQpLCAiZyIoYSkgOiAiY2MiKTsgXAogICAgYXNtKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICIrciIoY2FycnkpLCAiK2QiKGhpZ2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiYSIobG93KSwgImciKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChyKSA9IGNhcnJ5LCBjYXJyeSA9IGhpZ2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgfSB3aGlsZSAoMCkKI3VuZGVmIHNxcgojZGVmaW5lIHNxcihyMCwgcjEsIGEpIGFzbSgibXVscSAlMiIgOiAiPWEiKHIwKSwgIj1kIihyMSkgOiAiYSIoYSkgOiAiY2MiKTsKCkJOX1VMT05HIGJuX211bF9hZGRfd29yZHMoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGludCBudW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgQk5fVUxPTkcgdykgewogIEJOX1VMT05HIGMxID0gMDsKCiAgaWYgKG51bSA8PSAwKQogICAgcmV0dXJuIChjMSk7CgogIHdoaWxlIChudW0gJiB+MykgewogICAgbXVsX2FkZChycFswXSwgYXBbMF0sIHcsIGMxKTsKICAgIG11bF9hZGQocnBbMV0sIGFwWzFdLCB3LCBjMSk7CiAgICBtdWxfYWRkKHJwWzJdLCBhcFsyXSwgdywgYzEpOwogICAgbXVsX2FkZChycFszXSwgYXBbM10sIHcsIGMxKTsKICAgIGFwICs9IDQ7CiAgICBycCArPSA0OwogICAgbnVtIC09IDQ7CiAgfQogIGlmIChudW0pIHsKICAgIG11bF9hZGQocnBbMF0sIGFwWzBdLCB3LCBjMSk7CiAgICBpZiAoLS1udW0gPT0gMCkKICAgICAgcmV0dXJuIGMxOwogICAgbXVsX2FkZChycFsxXSwgYXBbMV0sIHcsIGMxKTsKICAgIGlmICgtLW51bSA9PSAwKQogICAgICByZXR1cm4gYzE7CiAgICBtdWxfYWRkKHJwWzJdLCBhcFsyXSwgdywgYzEpOwogICAgcmV0dXJuIGMxOwogIH0KCiAgcmV0dXJuIChjMSk7Cn0KCkJOX1VMT05HIGJuX211bF93b3JkcyhCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgaW50IG51bSwgQk5fVUxPTkcgdykgewogIEJOX1VMT05HIGMxID0gMDsKCiAgaWYgKG51bSA8PSAwKQogICAgcmV0dXJuIChjMSk7CgogIHdoaWxlIChudW0gJiB+MykgewogICAgbXVsKHJwWzBdLCBhcFswXSwgdywgYzEpOwogICAgbXVsKHJwWzFdLCBhcFsxXSwgdywgYzEpOwogICAgbXVsKHJwWzJdLCBhcFsyXSwgdywgYzEpOwogICAgbXVsKHJwWzNdLCBhcFszXSwgdywgYzEpOwogICAgYXAgKz0gNDsKICAgIHJwICs9IDQ7CiAgICBudW0gLT0gNDsKICB9CiAgaWYgKG51bSkgewogICAgbXVsKHJwWzBdLCBhcFswXSwgdywgYzEpOwogICAgaWYgKC0tbnVtID09IDApCiAgICAgIHJldHVybiBjMTsKICAgIG11bChycFsxXSwgYXBbMV0sIHcsIGMxKTsKICAgIGlmICgtLW51bSA9PSAwKQogICAgICByZXR1cm4gYzE7CiAgICBtdWwocnBbMl0sIGFwWzJdLCB3LCBjMSk7CiAgfQogIHJldHVybiAoYzEpOwp9Cgp2b2lkIGJuX3Nxcl93b3JkcyhCTl9VTE9ORyAqciwgY29uc3QgQk5fVUxPTkcgKmEsIGludCBuKSB7CiAgaWYgKG4gPD0gMCkKICAgIHJldHVybjsKCiAgd2hpbGUgKG4gJiB+MykgewogICAgc3FyKHJbMF0sIHJbMV0sIGFbMF0pOwogICAgc3FyKHJbMl0sIHJbM10sIGFbMV0pOwogICAgc3FyKHJbNF0sIHJbNV0sIGFbMl0pOwogICAgc3FyKHJbNl0sIHJbN10sIGFbM10pOwogICAgYSArPSA0OwogICAgciArPSA4OwogICAgbiAtPSA0OwogIH0KICBpZiAobikgewogICAgc3FyKHJbMF0sIHJbMV0sIGFbMF0pOwogICAgaWYgKC0tbiA9PSAwKQogICAgICByZXR1cm47CiAgICBzcXIoclsyXSwgclszXSwgYVsxXSk7CiAgICBpZiAoLS1uID09IDApCiAgICAgIHJldHVybjsKICAgIHNxcihyWzRdLCByWzVdLCBhWzJdKTsKICB9Cn0KCkJOX1VMT05HIGJuX2Rpdl93b3JkcyhCTl9VTE9ORyBoLCBCTl9VTE9ORyBsLCBCTl9VTE9ORyBkKSB7CiAgQk5fVUxPTkcgcmV0LCB3YXN0ZTsKCiAgYXNtKCJkaXZxCSU0IiA6ICI9YSIocmV0KSwgIj1kIih3YXN0ZSkgOiAiYSIobCksICJkIihoKSwgImciKGQpIDogImNjIik7CgogIHJldHVybiByZXQ7Cn0KCkJOX1VMT05HIGJuX2FkZF93b3JkcyhCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLAogICAgICAgICAgICAgICAgICAgICAgaW50IG4pIHsKICBCTl9VTE9ORyByZXQ7CiAgc2l6ZV90IGkgPSAwOwoKICBpZiAobiA8PSAwKQogICAgcmV0dXJuIDA7CgogIGFzbSB2b2xhdGlsZSAoCiAgICAgICIJc3VicQklMCwlMAkJXG4iIC8qIGNsZWFyIGNhcnJ5ICovCiAgICAgICIJam1wCTFmCQlcbiIKICAgICAgIi5wMmFsaWduIDQJCQlcbiIKICAgICAgIjE6CW1vdnEJKCU0LCUyLDgpLCUwCVxuIgogICAgICAiCWFkY3EJKCU1LCUyLDgpLCUwCVxuIgogICAgICAiCW1vdnEJJTAsKCUzLCUyLDgpCVxuIgogICAgICAiCWxlYQkxKCUyKSwlMglcbiIKICAgICAgIglsb29wCTFiCQlcbiIKICAgICAgIglzYmJxCSUwLCUwCQlcbiIKICAgICAgOiAiPSZyIihyZXQpLCAiK2MiKG4pLCAiK3IiKGkpCiAgICAgIDogInIiKHJwKSwgInIiKGFwKSwgInIiKGJwKQogICAgICA6ICJjYyIsICJtZW1vcnkiKTsKCiAgcmV0dXJuIHJldCAmIDE7Cn0KCiNpZm5kZWYgU0lNSUNTCkJOX1VMT05HIGJuX3N1Yl93b3JkcyhCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLAogICAgICAgICAgICAgICAgICAgICAgaW50IG4pIHsKICBCTl9VTE9ORyByZXQ7CiAgc2l6ZV90IGkgPSAwOwoKICBpZiAobiA8PSAwKQogICAgcmV0dXJuIDA7CgogIGFzbSB2b2xhdGlsZSAoCiAgICAgICIJc3VicQklMCwlMAkJXG4iIC8qIGNsZWFyIGJvcnJvdyAqLwogICAgICAiCWptcAkxZgkJXG4iCiAgICAgICIucDJhbGlnbiA0CQkJXG4iCiAgICAgICIxOgltb3ZxCSglNCwlMiw4KSwlMAlcbiIKICAgICAgIglzYmJxCSglNSwlMiw4KSwlMAlcbiIKICAgICAgIgltb3ZxCSUwLCglMywlMiw4KQlcbiIKICAgICAgIglsZWEJMSglMiksJTIJXG4iCiAgICAgICIJbG9vcAkxYgkJXG4iCiAgICAgICIJc2JicQklMCwlMAkJXG4iCiAgICAgIDogIj0mciIocmV0KSwgIitjIihuKSwgIityIihpKQogICAgICA6ICJyIihycCksICJyIihhcCksICJyIihicCkKICAgICAgOiAiY2MiLCAibWVtb3J5Iik7CgogIHJldHVybiByZXQgJiAxOwp9CiNlbHNlCi8qIFNpbWljcyAxLjQ8NyBoYXMgYnVnZ3kgc2JicTotKCAqLwojZGVmaW5lIEJOX01BU0syIDB4ZmZmZmZmZmZmZmZmZmZmZkwKQk5fVUxPTkcgYm5fc3ViX3dvcmRzKEJOX1VMT05HICpyLCBCTl9VTE9ORyAqYSwgQk5fVUxPTkcgKmIsIGludCBuKSB7CiAgQk5fVUxPTkcgdDEsIHQyOwogIGludCBjID0gMDsKCiAgaWYgKG4gPD0gMCkKICAgIHJldHVybiAoKEJOX1VMT05HKTApOwoKICBmb3IgKDs7KSB7CiAgICB0MSA9IGFbMF07CiAgICB0MiA9IGJbMF07CiAgICByWzBdID0gKHQxIC0gdDIgLSBjKSAmIEJOX01BU0syOwogICAgaWYgKHQxICE9IHQyKQogICAgICBjID0gKHQxIDwgdDIpOwogICAgaWYgKC0tbiA8PSAwKQogICAgICBicmVhazsKCiAgICB0MSA9IGFbMV07CiAgICB0MiA9IGJbMV07CiAgICByWzFdID0gKHQxIC0gdDIgLSBjKSAmIEJOX01BU0syOwogICAgaWYgKHQxICE9IHQyKQogICAgICBjID0gKHQxIDwgdDIpOwogICAgaWYgKC0tbiA8PSAwKQogICAgICBicmVhazsKCiAgICB0MSA9IGFbMl07CiAgICB0MiA9IGJbMl07CiAgICByWzJdID0gKHQxIC0gdDIgLSBjKSAmIEJOX01BU0syOwogICAgaWYgKHQxICE9IHQyKQogICAgICBjID0gKHQxIDwgdDIpOwogICAgaWYgKC0tbiA8PSAwKQogICAgICBicmVhazsKCiAgICB0MSA9IGFbM107CiAgICB0MiA9IGJbM107CiAgICByWzNdID0gKHQxIC0gdDIgLSBjKSAmIEJOX01BU0syOwogICAgaWYgKHQxICE9IHQyKQogICAgICBjID0gKHQxIDwgdDIpOwogICAgaWYgKC0tbiA8PSAwKQogICAgICBicmVhazsKCiAgICBhICs9IDQ7CiAgICBiICs9IDQ7CiAgICByICs9IDQ7CiAgfQogIHJldHVybiAoYyk7Cn0KI2VuZGlmCgovKiBtdWxfYWRkX2MoYSxiLGMwLGMxLGMyKSAgLS0gYys9YSpiIGZvciB0aHJlZSB3b3JkIG51bWJlciBjPShjMixjMSxjMCkgKi8KLyogbXVsX2FkZF9jMihhLGIsYzAsYzEsYzIpIC0tIGMrPTIqYSpiIGZvciB0aHJlZSB3b3JkIG51bWJlciBjPShjMixjMSxjMCkgKi8KLyogc3FyX2FkZF9jKGEsaSxjMCxjMSxjMikgIC0tIGMrPWFbaV1eMiBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApICovCi8qIHNxcl9hZGRfYzIoYSxpLGMwLGMxLGMyKSAtLSBjKz0yKmFbaV0qYVtqXSBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApCiAqLwoKI2lmIDAKLyogb3JpZ2luYWwgbWFjcm9zIGFyZSBrZXB0IGZvciByZWZlcmVuY2UgcHVycG9zZXMgKi8KI2RlZmluZSBtdWxfYWRkX2MoYSwgYiwgYzAsIGMxLCBjMikgXAogIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBCTl9VTE9ORyB0YSA9IChhKSwgdGIgPSAoYik7ICAgIFwKICAgIHQxID0gdGEgKiB0YjsgICAgICAgICAgICAgICAgICAgXAogICAgdDIgPSBCTl9VTVVMVF9ISUdIKHRhLCB0Yik7ICAgICBcCiAgICBjMCArPSB0MTsgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHQyICs9IChjMCA8IHQxKSA/IDEgOiAwOyAgICAgICAgXAogICAgYzEgKz0gdDI7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBjMiArPSAoYzEgPCB0MikgPyAxIDogMDsgICAgICAgIFwKICB9CgojZGVmaW5lIG11bF9hZGRfYzIoYSwgYiwgYzAsIGMxLCBjMikgXAogIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgQk5fVUxPTkcgdGEgPSAoYSksIHRiID0gKGIpLCB0MDsgXAogICAgdDEgPSBCTl9VTVVMVF9ISUdIKHRhLCB0Yik7ICAgICAgXAogICAgdDAgPSB0YSAqIHRiOyAgICAgICAgICAgICAgICAgICAgXAogICAgdDIgPSB0MSArIHQxOyAgICAgICAgICAgICAgICAgICAgXAogICAgYzIgKz0gKHQyIDwgdDEpID8gMSA6IDA7ICAgICAgICAgXAogICAgdDEgPSB0MCArIHQwOyAgICAgICAgICAgICAgICAgICAgXAogICAgdDIgKz0gKHQxIDwgdDApID8gMSA6IDA7ICAgICAgICAgXAogICAgYzAgKz0gdDE7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgdDIgKz0gKGMwIDwgdDEpID8gMSA6IDA7ICAgICAgICAgXAogICAgYzEgKz0gdDI7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgYzIgKz0gKGMxIDwgdDIpID8gMSA6IDA7ICAgICAgICAgXAogIH0KI2Vsc2UKI2RlZmluZSBtdWxfYWRkX2MoYSwgYiwgYzAsIGMxLCBjMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgYXNtKCJtdWxxICUzIiA6ICI9YSIodDEpLCAiPWQiKHQyKSA6ICJhIihhKSwgIm0iKGIpIDogImNjIik7IFwKICAgIGFzbSgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiK3IiKGMwKSwgIitkIih0MikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImEiKHQxKSwgImciKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJjYyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBhc20oImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogIityIihjMSksICIrciIoYzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJkIih0MiksICJnIigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIH0gd2hpbGUgKDApCgojZGVmaW5lIHNxcl9hZGRfYyhhLCBpLCBjMCwgYzEsIGMyKSAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGFzbSgibXVscSAlMiIgOiAiPWEiKHQxKSwgIj1kIih0MikgOiAiYSIoYVtpXSkgOiAiY2MiKTsgXAogICAgYXNtKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiK3IiKGMwKSwgIitkIih0MikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJhIih0MSksICJnIigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBhc20oImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICIrciIoYzEpLCAiK3IiKGMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImQiKHQyKSwgImciKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICB9IHdoaWxlICgwKQoKI2RlZmluZSBtdWxfYWRkX2MyKGEsIGIsIGMwLCBjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBhc20oIm11bHEgJTMiIDogIj1hIih0MSksICI9ZCIodDIpIDogImEiKGEpLCAibSIoYikgOiAiY2MiKTsgICAgICAgIFwKICAgIGFzbSgiYWRkcSAlMCwlMDsgYWRjcSAlMiwlMSIgOiAiK2QiKHQyKSwgIityIihjMikgOiAiZyIoMCkgOiAiY2MiKTsgXAogICAgYXNtKCJhZGRxICUwLCUwOyBhZGNxICUyLCUxIiA6ICIrYSIodDEpLCAiK2QiKHQyKSA6ICJnIigwKSA6ICJjYyIpOyBcCiAgICBhc20oImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICIrciIoYzApLCAiK2QiKHQyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImEiKHQxKSwgImciKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGFzbSgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogIityIihjMSksICIrciIoYzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiZCIodDIpLCAiZyIoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJjYyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIH0gd2hpbGUgKDApCiNlbmRpZgoKI2RlZmluZSBzcXJfYWRkX2MyKGEsIGksIGosIGMwLCBjMSwgYzIpIG11bF9hZGRfYzIoKGEpW2ldLCAoYSlbal0sIGMwLCBjMSwgYzIpCgp2b2lkIGJuX211bF9jb21iYTgoQk5fVUxPTkcgKnIsIEJOX1VMT05HICphLCBCTl9VTE9ORyAqYikgewogIEJOX1VMT05HIHQxLCB0MjsKICBCTl9VTE9ORyBjMSwgYzIsIGMzOwoKICBjMSA9IDA7CiAgYzIgPSAwOwogIGMzID0gMDsKICBtdWxfYWRkX2MoYVswXSwgYlswXSwgYzEsIGMyLCBjMyk7CiAgclswXSA9IGMxOwogIGMxID0gMDsKICBtdWxfYWRkX2MoYVswXSwgYlsxXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbMV0sIGJbMF0sIGMyLCBjMywgYzEpOwogIHJbMV0gPSBjMjsKICBjMiA9IDA7CiAgbXVsX2FkZF9jKGFbMl0sIGJbMF0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzFdLCBiWzFdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVswXSwgYlsyXSwgYzMsIGMxLCBjMik7CiAgclsyXSA9IGMzOwogIGMzID0gMDsKICBtdWxfYWRkX2MoYVswXSwgYlszXSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbMV0sIGJbMl0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzJdLCBiWzFdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVszXSwgYlswXSwgYzEsIGMyLCBjMyk7CiAgclszXSA9IGMxOwogIGMxID0gMDsKICBtdWxfYWRkX2MoYVs0XSwgYlswXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbM10sIGJbMV0sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzJdLCBiWzJdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVsxXSwgYlszXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbMF0sIGJbNF0sIGMyLCBjMywgYzEpOwogIHJbNF0gPSBjMjsKICBjMiA9IDA7CiAgbXVsX2FkZF9jKGFbMF0sIGJbNV0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzFdLCBiWzRdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVsyXSwgYlszXSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbM10sIGJbMl0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzRdLCBiWzFdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVs1XSwgYlswXSwgYzMsIGMxLCBjMik7CiAgcls1XSA9IGMzOwogIGMzID0gMDsKICBtdWxfYWRkX2MoYVs2XSwgYlswXSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbNV0sIGJbMV0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzRdLCBiWzJdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVszXSwgYlszXSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbMl0sIGJbNF0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzFdLCBiWzVdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVswXSwgYls2XSwgYzEsIGMyLCBjMyk7CiAgcls2XSA9IGMxOwogIGMxID0gMDsKICBtdWxfYWRkX2MoYVswXSwgYls3XSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbMV0sIGJbNl0sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzJdLCBiWzVdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVszXSwgYls0XSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbNF0sIGJbM10sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzVdLCBiWzJdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVs2XSwgYlsxXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbN10sIGJbMF0sIGMyLCBjMywgYzEpOwogIHJbN10gPSBjMjsKICBjMiA9IDA7CiAgbXVsX2FkZF9jKGFbN10sIGJbMV0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzZdLCBiWzJdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVs1XSwgYlszXSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbNF0sIGJbNF0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzNdLCBiWzVdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVsyXSwgYls2XSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbMV0sIGJbN10sIGMzLCBjMSwgYzIpOwogIHJbOF0gPSBjMzsKICBjMyA9IDA7CiAgbXVsX2FkZF9jKGFbMl0sIGJbN10sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzNdLCBiWzZdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVs0XSwgYls1XSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbNV0sIGJbNF0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzZdLCBiWzNdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVs3XSwgYlsyXSwgYzEsIGMyLCBjMyk7CiAgcls5XSA9IGMxOwogIGMxID0gMDsKICBtdWxfYWRkX2MoYVs3XSwgYlszXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbNl0sIGJbNF0sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzVdLCBiWzVdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVs0XSwgYls2XSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbM10sIGJbN10sIGMyLCBjMywgYzEpOwogIHJbMTBdID0gYzI7CiAgYzIgPSAwOwogIG11bF9hZGRfYyhhWzRdLCBiWzddLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVs1XSwgYls2XSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbNl0sIGJbNV0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzddLCBiWzRdLCBjMywgYzEsIGMyKTsKICByWzExXSA9IGMzOwogIGMzID0gMDsKICBtdWxfYWRkX2MoYVs3XSwgYls1XSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbNl0sIGJbNl0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzVdLCBiWzddLCBjMSwgYzIsIGMzKTsKICByWzEyXSA9IGMxOwogIGMxID0gMDsKICBtdWxfYWRkX2MoYVs2XSwgYls3XSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbN10sIGJbNl0sIGMyLCBjMywgYzEpOwogIHJbMTNdID0gYzI7CiAgYzIgPSAwOwogIG11bF9hZGRfYyhhWzddLCBiWzddLCBjMywgYzEsIGMyKTsKICByWzE0XSA9IGMzOwogIHJbMTVdID0gYzE7Cn0KCnZvaWQgYm5fbXVsX2NvbWJhNChCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEsIEJOX1VMT05HICpiKSB7CiAgQk5fVUxPTkcgdDEsIHQyOwogIEJOX1VMT05HIGMxLCBjMiwgYzM7CgogIGMxID0gMDsKICBjMiA9IDA7CiAgYzMgPSAwOwogIG11bF9hZGRfYyhhWzBdLCBiWzBdLCBjMSwgYzIsIGMzKTsKICByWzBdID0gYzE7CiAgYzEgPSAwOwogIG11bF9hZGRfYyhhWzBdLCBiWzFdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVsxXSwgYlswXSwgYzIsIGMzLCBjMSk7CiAgclsxXSA9IGMyOwogIGMyID0gMDsKICBtdWxfYWRkX2MoYVsyXSwgYlswXSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbMV0sIGJbMV0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzBdLCBiWzJdLCBjMywgYzEsIGMyKTsKICByWzJdID0gYzM7CiAgYzMgPSAwOwogIG11bF9hZGRfYyhhWzBdLCBiWzNdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVsxXSwgYlsyXSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbMl0sIGJbMV0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzNdLCBiWzBdLCBjMSwgYzIsIGMzKTsKICByWzNdID0gYzE7CiAgYzEgPSAwOwogIG11bF9hZGRfYyhhWzNdLCBiWzFdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVsyXSwgYlsyXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbMV0sIGJbM10sIGMyLCBjMywgYzEpOwogIHJbNF0gPSBjMjsKICBjMiA9IDA7CiAgbXVsX2FkZF9jKGFbMl0sIGJbM10sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzNdLCBiWzJdLCBjMywgYzEsIGMyKTsKICByWzVdID0gYzM7CiAgYzMgPSAwOwogIG11bF9hZGRfYyhhWzNdLCBiWzNdLCBjMSwgYzIsIGMzKTsKICByWzZdID0gYzE7CiAgcls3XSA9IGMyOwp9Cgp2b2lkIGJuX3Nxcl9jb21iYTgoQk5fVUxPTkcgKnIsIGNvbnN0IEJOX1VMT05HICphKSB7CiAgQk5fVUxPTkcgdDEsIHQyOwogIEJOX1VMT05HIGMxLCBjMiwgYzM7CgogIGMxID0gMDsKICBjMiA9IDA7CiAgYzMgPSAwOwogIHNxcl9hZGRfYyhhLCAwLCBjMSwgYzIsIGMzKTsKICByWzBdID0gYzE7CiAgYzEgPSAwOwogIHNxcl9hZGRfYzIoYSwgMSwgMCwgYzIsIGMzLCBjMSk7CiAgclsxXSA9IGMyOwogIGMyID0gMDsKICBzcXJfYWRkX2MoYSwgMSwgYzMsIGMxLCBjMik7CiAgc3FyX2FkZF9jMihhLCAyLCAwLCBjMywgYzEsIGMyKTsKICByWzJdID0gYzM7CiAgYzMgPSAwOwogIHNxcl9hZGRfYzIoYSwgMywgMCwgYzEsIGMyLCBjMyk7CiAgc3FyX2FkZF9jMihhLCAyLCAxLCBjMSwgYzIsIGMzKTsKICByWzNdID0gYzE7CiAgYzEgPSAwOwogIHNxcl9hZGRfYyhhLCAyLCBjMiwgYzMsIGMxKTsKICBzcXJfYWRkX2MyKGEsIDMsIDEsIGMyLCBjMywgYzEpOwogIHNxcl9hZGRfYzIoYSwgNCwgMCwgYzIsIGMzLCBjMSk7CiAgcls0XSA9IGMyOwogIGMyID0gMDsKICBzcXJfYWRkX2MyKGEsIDUsIDAsIGMzLCBjMSwgYzIpOwogIHNxcl9hZGRfYzIoYSwgNCwgMSwgYzMsIGMxLCBjMik7CiAgc3FyX2FkZF9jMihhLCAzLCAyLCBjMywgYzEsIGMyKTsKICByWzVdID0gYzM7CiAgYzMgPSAwOwogIHNxcl9hZGRfYyhhLCAzLCBjMSwgYzIsIGMzKTsKICBzcXJfYWRkX2MyKGEsIDQsIDIsIGMxLCBjMiwgYzMpOwogIHNxcl9hZGRfYzIoYSwgNSwgMSwgYzEsIGMyLCBjMyk7CiAgc3FyX2FkZF9jMihhLCA2LCAwLCBjMSwgYzIsIGMzKTsKICByWzZdID0gYzE7CiAgYzEgPSAwOwogIHNxcl9hZGRfYzIoYSwgNywgMCwgYzIsIGMzLCBjMSk7CiAgc3FyX2FkZF9jMihhLCA2LCAxLCBjMiwgYzMsIGMxKTsKICBzcXJfYWRkX2MyKGEsIDUsIDIsIGMyLCBjMywgYzEpOwogIHNxcl9hZGRfYzIoYSwgNCwgMywgYzIsIGMzLCBjMSk7CiAgcls3XSA9IGMyOwogIGMyID0gMDsKICBzcXJfYWRkX2MoYSwgNCwgYzMsIGMxLCBjMik7CiAgc3FyX2FkZF9jMihhLCA1LCAzLCBjMywgYzEsIGMyKTsKICBzcXJfYWRkX2MyKGEsIDYsIDIsIGMzLCBjMSwgYzIpOwogIHNxcl9hZGRfYzIoYSwgNywgMSwgYzMsIGMxLCBjMik7CiAgcls4XSA9IGMzOwogIGMzID0gMDsKICBzcXJfYWRkX2MyKGEsIDcsIDIsIGMxLCBjMiwgYzMpOwogIHNxcl9hZGRfYzIoYSwgNiwgMywgYzEsIGMyLCBjMyk7CiAgc3FyX2FkZF9jMihhLCA1LCA0LCBjMSwgYzIsIGMzKTsKICByWzldID0gYzE7CiAgYzEgPSAwOwogIHNxcl9hZGRfYyhhLCA1LCBjMiwgYzMsIGMxKTsKICBzcXJfYWRkX2MyKGEsIDYsIDQsIGMyLCBjMywgYzEpOwogIHNxcl9hZGRfYzIoYSwgNywgMywgYzIsIGMzLCBjMSk7CiAgclsxMF0gPSBjMjsKICBjMiA9IDA7CiAgc3FyX2FkZF9jMihhLCA3LCA0LCBjMywgYzEsIGMyKTsKICBzcXJfYWRkX2MyKGEsIDYsIDUsIGMzLCBjMSwgYzIpOwogIHJbMTFdID0gYzM7CiAgYzMgPSAwOwogIHNxcl9hZGRfYyhhLCA2LCBjMSwgYzIsIGMzKTsKICBzcXJfYWRkX2MyKGEsIDcsIDUsIGMxLCBjMiwgYzMpOwogIHJbMTJdID0gYzE7CiAgYzEgPSAwOwogIHNxcl9hZGRfYzIoYSwgNywgNiwgYzIsIGMzLCBjMSk7CiAgclsxM10gPSBjMjsKICBjMiA9IDA7CiAgc3FyX2FkZF9jKGEsIDcsIGMzLCBjMSwgYzIpOwogIHJbMTRdID0gYzM7CiAgclsxNV0gPSBjMTsKfQoKdm9pZCBibl9zcXJfY29tYmE0KEJOX1VMT05HICpyLCBjb25zdCBCTl9VTE9ORyAqYSkgewogIEJOX1VMT05HIHQxLCB0MjsKICBCTl9VTE9ORyBjMSwgYzIsIGMzOwoKICBjMSA9IDA7CiAgYzIgPSAwOwogIGMzID0gMDsKICBzcXJfYWRkX2MoYSwgMCwgYzEsIGMyLCBjMyk7CiAgclswXSA9IGMxOwogIGMxID0gMDsKICBzcXJfYWRkX2MyKGEsIDEsIDAsIGMyLCBjMywgYzEpOwogIHJbMV0gPSBjMjsKICBjMiA9IDA7CiAgc3FyX2FkZF9jKGEsIDEsIGMzLCBjMSwgYzIpOwogIHNxcl9hZGRfYzIoYSwgMiwgMCwgYzMsIGMxLCBjMik7CiAgclsyXSA9IGMzOwogIGMzID0gMDsKICBzcXJfYWRkX2MyKGEsIDMsIDAsIGMxLCBjMiwgYzMpOwogIHNxcl9hZGRfYzIoYSwgMiwgMSwgYzEsIGMyLCBjMyk7CiAgclszXSA9IGMxOwogIGMxID0gMDsKICBzcXJfYWRkX2MoYSwgMiwgYzIsIGMzLCBjMSk7CiAgc3FyX2FkZF9jMihhLCAzLCAxLCBjMiwgYzMsIGMxKTsKICByWzRdID0gYzI7CiAgYzIgPSAwOwogIHNxcl9hZGRfYzIoYSwgMywgMiwgYzMsIGMxLCBjMik7CiAgcls1XSA9IGMzOwogIGMzID0gMDsKICBzcXJfYWRkX2MoYSwgMywgYzEsIGMyLCBjMyk7CiAgcls2XSA9IGMxOwogIHJbN10gPSBjMjsKfQoKI2VuZGlmICAvKiBkZWZpbmVkKE9QRU5TU0xfWDg2XzY0KSAmJiAhZGVmaW5lZChPUEVOU1NMX1dJTkRPV1MpICovCg==