LyoKICogVmVydGV4IHBvc2l0aW9uIGRhdGEgZGVzY3JpYmluZyB0aGUgbGV0dGVyICdkJwogKgogKiAoYykgQ29weXJpZ2h0IDE5OTMsIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICogQ29weXJpZ2h0IKkgMjAxMiBMaW5hcm8gTGltaXRlZAogKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgZ2xtYXJrMiBPcGVuR0wgKEVTKSAyLjAgYmVuY2htYXJrLgogKgogKiBnbG1hcmsyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCiAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKICogdmVyc2lvbi4KICoKICogZ2xtYXJrMiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwogKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAqIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKICogZ2xtYXJrMi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICoKICogQXV0aG9yczoKICogIEplc3NlIEJhcmtlcgogKi8KI2luY2x1ZGUgImNoYXJhY3RlcnMuaCIKCnVzaW5nIExpYk1hdHJpeDo6dmVjMjsKCkxldHRlckQ6OkxldHRlckQoKQp7CiAgICAvLyBWZXJ0ZXggZGF0YS4uLgogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC43MTQ1NzksIDkuOTg3Njc5KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigyLjg0MTg4OSwgOS40MjkxNTgpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDIuODI1NDYyLCA5LjE2NjMyNSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS44NTYyNjMsIDguNzIyNzkzKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigyLjAwNDEwNywgOC4wMDAwMDApKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDAuOTY5MTk5LCA3LjYwNTc1MCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS40OTQ4NjYsIDYuNjM2NTUwKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigwLjYwNzgwMywgNi4wMjg3NDgpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDEuNTI3NzIxLCA0Ljk2MDk4NikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMC43NzIwNzQsIDQuMjU0NjIwKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigxLjc3NDEyNywgNC4xMzk2MzApKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDEuNDQ1NTg1LCAzLjE4Njg1OCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi4yNjY5NDAsIDMuODQzOTQyKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigyLjI1MDUxMywgMy4wMjI1ODcpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDIuNzc2MTgxLCAzLjg0Mzk0MikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy4xMzc1NzcsIDMuMzgzOTg0KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigzLjM1MTEyOSwgNC4wMDgyMTQpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDMuOTA5NjUxLCA0LjQ1MTc0NikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC4wOTAzNDksIDQuOTYwOTg2KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0Ljg2MjQyMywgNS45NDY2MTIpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDQuNzYzODYwLCA2LjY1Mjk3NykpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNS4zODgwOTAsIDcuNTcyODk1KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0Ljg2MjQyMywgOC40OTI4MTMpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDUuNjE4MDcwLCA5LjkyMTk3MSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC42OTgxNTIsIDEwLjk0MDQ1MikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNS4zMzg4MDksIDEyLjMwMzkwMikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC4yMzgxOTMsIDEyLjk2MDk4NSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC40NTE3NDYsIDE0LjU1NDQxNSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy41ODExMDksIDE0LjI5MTU4MSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy42MTM5NjMsIDE1LjM0MjkxNikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi42Nzc2MTgsIDE1LjE0NTc5MCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi40ODA0OTMsIDE1LjU0MDA0MSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi4wMzY5NjEsIDE1LjIxMTQ5OSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS4yODEzMTQsIDE1LjExMjkzNikpOwoKICAgIC8vIEluZGV4IGRhdGEuLi4KICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTcpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTgpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjcpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjgpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDEwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDEyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE0KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE2KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI0KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI2KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMzKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI5KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI3KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIzKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE5KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE3KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDEzKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDExKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMSk7CgogICAgLy8gUHJpbWl0aXZlIHN0YXRlIHNvIHRoYXQgdGhlIGRyYXcgY2FsbCBjYW4gaXNzdWUgdGhlIHByaW1pdGl2ZXMgd2Ugd2FudC4KICAgIHVuc2lnbmVkIGludCBjdXJPZmZzZXQoMCk7CiAgICBwcmltVmVjXy5wdXNoX2JhY2soUHJpbWl0aXZlU3RhdGUoR0xfVFJJQU5HTEVfU1RSSVAsIDM0LCBjdXJPZmZzZXQpKTsKICAgIGN1ck9mZnNldCArPSAoMzQgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKICAgIHByaW1WZWNfLnB1c2hfYmFjayhQcmltaXRpdmVTdGF0ZShHTF9MSU5FX1NUUklQLCAzNCwgY3VyT2Zmc2V0KSk7Cn0K