LyoKICogIEhUTUwgRW50aXR5ICYgRW5jb2Rpbmcgbm9ybWFsaXphdGlvbi4KICoKICogIENvcHlyaWdodCAoQykgMjAwNiBU9nL2ayBFZHZpbiA8ZWR3aW5AY2xhbWF2Lm5ldD4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyAKICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAogKiAgTUEgMDIxMTAtMTMwMSwgVVNBLgogKgogKi8KI2lmbmRlZiBfRU5DT0RJTkdfQUxJQVNFU19ICiNkZWZpbmUgX0VOQ09ESU5HX0FMSUFTRVNfSAojaW5jbHVkZSAiY2xhbWF2LWNvbmZpZy5oIgoKCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSAiaGFzaHRhYi5oIgoKLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvZiBrZXlzLCBpbnN0ZWFkIHVzZSBnZW5lcmF0ZV9lbmNvZGluZ19hbGlhc2VzIGluIGNvbnRyaWIvZW50aXR5bm9ybS4KICogWW91IGNhbiBzYWZlbHkgY2hhbmdlIHRoZSB2YWx1ZXMgKG9uIHRoZSByaWdodCkgKi8Kc3RhdGljIHN0cnVjdCBlbGVtZW50IGFsaWFzZXNfaHRhYmxlX2VsZW1lbnRzW10gPSB7Cgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCgl7KGNvbnN0IHVuc2lnbmVkIGNoYXIqKSJVVEY4IiwgOH0sCgl7KGNvbnN0IHVuc2lnbmVkIGNoYXIqKSJJU08tMTA2NDYvVVRGLTgiLCA4fSwKCXtOVUxMLCAwfSwKCXsoY29uc3QgdW5zaWduZWQgY2hhciopIlVURi0xNiIsIDF9LAoJeyhjb25zdCB1bnNpZ25lZCBjaGFyKikiVVRGMTZMRSIsIDd9LAoJe05VTEwsIDB9LAoJeyhjb25zdCB1bnNpZ25lZCBjaGFyKikiVVRGLTMyIiwgMH0sCgl7KGNvbnN0IHVuc2lnbmVkIGNoYXIqKSIxMDY0Ni0xOjE5OTMvVUNTNCIsIDB9LAoJe05VTEwsIDB9LAoJeyhjb25zdCB1bnNpZ25lZCBjaGFyKikiVVRGLTE2TEUiLCA3fSwKCXtOVUxMLCAwfSwKCXtOVUxMLCAwfSwKCXtOVUxMLCAwfSwKCXsoY29uc3QgdW5zaWduZWQgY2hhciopIlVDUy00TEUiLCAyfSwKCXsoY29uc3QgdW5zaWduZWQgY2hhciopIlVDUy00IiwgMH0sCgl7KGNvbnN0IHVuc2lnbmVkIGNoYXIqKSJVQ1MyIiwgMX0sCgl7KGNvbnN0IHVuc2lnbmVkIGNoYXIqKSJVVEYtMTZCRSIsIDZ9LAoJe05VTEwsIDB9LAoJeyhjb25zdCB1bnNpZ25lZCBjaGFyKikiVVRGLTMyTEUiLCAyfSwKCXtOVUxMLCAwfSwKCXsoY29uc3QgdW5zaWduZWQgY2hhciopIlVURjE2QkUiLCA2fSwKCXsoY29uc3QgdW5zaWduZWQgY2hhciopIlVURjMyIiwgMH0sCgl7KGNvbnN0IHVuc2lnbmVkIGNoYXIqKSJVVEYtMzJCRSIsIDN9LAoJeyhjb25zdCB1bnNpZ25lZCBjaGFyKikiVVRGMzJMRSIsIDJ9LAoJe05VTEwsIDB9LAoJe05VTEwsIDB9LAoJe05VTEwsIDB9LAoJe05VTEwsIDB9LAoJe05VTEwsIDB9LAoJe05VTEwsIDB9LAoJeyhjb25zdCB1bnNpZ25lZCBjaGFyKikiVUNTLTRCRSIsIDN9LAoJeyhjb25zdCB1bnNpZ25lZCBjaGFyKikiSVNPLTEwNjQ2L1VDUzIiLCAxfSwKCXtOVUxMLCAwfSwKCXsoY29uc3QgdW5zaWduZWQgY2hhciopIjEwNjQ2LTE6MTk5MyIsIDB9LAoJeyhjb25zdCB1bnNpZ25lZCBjaGFyKikiSVNPLTEwNjQ2L1VDUzQiLCAwfSwKCXsoY29uc3QgdW5zaWduZWQgY2hhciopIklTTy0xMDY0NiIsIDB9LAoJeyhjb25zdCB1bnNpZ25lZCBjaGFyKikiVVRGLTgiLCA4fSwKCXsoY29uc3QgdW5zaWduZWQgY2hhciopIlVURjMyQkUiLCAzfSwKCXsoY29uc3QgdW5zaWduZWQgY2hhciopIklTTy0xMDY0Ni9VVEY4IiwgOH0sCgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCgl7KGNvbnN0IHVuc2lnbmVkIGNoYXIqKSJVQ1M0IiwgMH0sCgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCgl7TlVMTCwgMH0sCn07CmNvbnN0IHN0cnVjdCBoYXNodGFibGUgYWxpYXNlc19odGFibGUgPSB7CglhbGlhc2VzX2h0YWJsZV9lbGVtZW50cywgNTMsIDI1LCA0Mgp9OwoKI2VuZGlmCg==