LyoKICogIENvcHlyaWdodCAoYykgMjAxMSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICoKICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQogKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAogKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQogKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCiAqLwoKLy8gVGhpcyBzdWItQVBJIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0aWVzOgovLwovLyAgLSBDYWxsYmFja3MgZm9yIFJUUCBhbmQgUlRDUCBldmVudHMgc3VjaCBhcyBtb2RpZmllZCBTU1JDIG9yIENTUkMuCi8vICAtIFNTUkMgaGFuZGxpbmcuCi8vICAtIFRyYW5zbWlzc2lvbiBvZiBSVENQIHNlbmRlciByZXBvcnRzLgovLyAgLSBPYnRhaW5pbmcgUlRDUCBkYXRhIGZyb20gaW5jb21pbmcgUlRDUCBzZW5kZXIgcmVwb3J0cy4KLy8gIC0gUlRQIGFuZCBSVENQIHN0YXRpc3RpY3MgKGppdHRlciwgcGFja2V0IGxvc3MsIFJUVCBldGMuKS4KLy8gIC0gRm9yd2FyZCBFcnJvciBDb3JyZWN0aW9uIChGRUMpLgovLyAgLSBSVFAgS2VlcGFsaXZlIGZvciBtYWludGFpbmluZyB0aGUgTkFUIG1hcHBpbmdzIGFzc29jaWF0ZWQgdG8gUlRQIGZsb3dzLgovLyAgLSBXcml0aW5nIFJUUCBhbmQgUlRDUCBwYWNrZXRzIHRvIGJpbmFyeSBmaWxlcyBmb3Igb2ZmLWxpbmUgYW5hbHlzaXMgb2YKLy8gICAgdGhlIGNhbGwgcXVhbGl0eS4KLy8gIC0gSW5zZXJ0aW5nIGV4dHJhIFJUUCBwYWNrZXRzIGludG8gYWN0aXZlIGF1ZGlvIHN0cmVhbS4KLy8KLy8gVXNhZ2UgZXhhbXBsZSwgb21pdHRpbmcgZXJyb3IgY2hlY2tpbmc6Ci8vCi8vICB1c2luZyBuYW1lc3BhY2Ugd2VicnRjOwovLyAgVm9pY2VFbmdpbmUqIHZvZSA9IFZvaWNlRW5naW5lOjpDcmVhdGUoKTsKLy8gIFZvRUJhc2UqIGJhc2UgPSBWb0VCYXNlOjpHZXRJbnRlcmZhY2Uodm9lKTsKLy8gIFZvRVJUUF9SVENQKiBydHBfcnRjcCAgPSBWb0VSVFBfUlRDUDo6R2V0SW50ZXJmYWNlKHZvZSk7Ci8vICBiYXNlLT5Jbml0KCk7Ci8vICBpbnQgY2ggPSBiYXNlLT5DcmVhdGVDaGFubmVsKCk7Ci8vICAuLi4KLy8gIHJ0cF9ydGNwLT5TZXRMb2NhbFNTUkMoY2gsIDEyMzQ1KTsKLy8gIC4uLgovLyAgYmFzZS0+RGVsZXRlQ2hhbm5lbChjaCk7Ci8vICBiYXNlLT5UZXJtaW5hdGUoKTsKLy8gIGJhc2UtPlJlbGVhc2UoKTsKLy8gIHJ0cF9ydGNwLT5SZWxlYXNlKCk7Ci8vICBWb2ljZUVuZ2luZTo6RGVsZXRlKHZvZSk7Ci8vCiNpZm5kZWYgV0VCUlRDX1ZPSUNFX0VOR0lORV9WT0VfUlRQX1JUQ1BfSAojZGVmaW5lIFdFQlJUQ19WT0lDRV9FTkdJTkVfVk9FX1JUUF9SVENQX0gKCiNpbmNsdWRlICJjb21tb25fdHlwZXMuaCIKCm5hbWVzcGFjZSB3ZWJydGMgewoKY2xhc3MgVm9pY2VFbmdpbmU7CgovLyBWb0VSVFBPYnNlcnZlcgpjbGFzcyBXRUJSVENfRExMRVhQT1JUIFZvRVJUUE9ic2VydmVyCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIE9uSW5jb21pbmdDU1JDQ2hhbmdlZCgKICAgICAgICBjb25zdCBpbnQgY2hhbm5lbCwgY29uc3QgdW5zaWduZWQgaW50IENTUkMsIGNvbnN0IGJvb2wgYWRkZWQpID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQgT25JbmNvbWluZ1NTUkNDaGFuZ2VkKAogICAgICAgIGNvbnN0IGludCBjaGFubmVsLCBjb25zdCB1bnNpZ25lZCBpbnQgU1NSQykgPSAwOwoKcHJvdGVjdGVkOgogICAgdmlydHVhbCB+Vm9FUlRQT2JzZXJ2ZXIoKSB7fQp9OwoKLy8gVm9FUlRDUE9ic2VydmVyCmNsYXNzIFdFQlJUQ19ETExFWFBPUlQgVm9FUlRDUE9ic2VydmVyCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIE9uQXBwbGljYXRpb25EYXRhUmVjZWl2ZWQoCiAgICAgICAgY29uc3QgaW50IGNoYW5uZWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3ViVHlwZSwKICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwKICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBkYXRhTGVuZ3RoSW5CeXRlcykgPSAwOwoKcHJvdGVjdGVkOgogICAgdmlydHVhbCB+Vm9FUlRDUE9ic2VydmVyKCkge30KfTsKCi8vIENhbGxTdGF0aXN0aWNzCnN0cnVjdCBDYWxsU3RhdGlzdGljcwp7CiAgICB1bnNpZ25lZCBzaG9ydCBmcmFjdGlvbkxvc3Q7CiAgICB1bnNpZ25lZCBpbnQgY3VtdWxhdGl2ZUxvc3Q7CiAgICB1bnNpZ25lZCBpbnQgZXh0ZW5kZWRNYXg7CiAgICB1bnNpZ25lZCBpbnQgaml0dGVyU2FtcGxlczsKICAgIGludCBydHRNczsKICAgIGludCBieXRlc1NlbnQ7CiAgICBpbnQgcGFja2V0c1NlbnQ7CiAgICBpbnQgYnl0ZXNSZWNlaXZlZDsKICAgIGludCBwYWNrZXRzUmVjZWl2ZWQ7Cn07CgovLyBWb0VSVFBfUlRDUApjbGFzcyBXRUJSVENfRExMRVhQT1JUIFZvRVJUUF9SVENQCnsKcHVibGljOgoKICAgIC8vIEZhY3RvcnkgZm9yIHRoZSBWb0VSVFBfUlRDUCBzdWItQVBJLiBJbmNyZWFzZXMgYW4gaW50ZXJuYWwKICAgIC8vIHJlZmVyZW5jZSBjb3VudGVyIGlmIHN1Y2Nlc3NmdWwuIFJldHVybnMgTlVMTCBpZiB0aGUgQVBJIGlzIG5vdAogICAgLy8gc3VwcG9ydGVkIG9yIGlmIGNvbnN0cnVjdGlvbiBmYWlscy4KICAgIHN0YXRpYyBWb0VSVFBfUlRDUCogR2V0SW50ZXJmYWNlKFZvaWNlRW5naW5lKiB2b2ljZUVuZ2luZSk7CgogICAgLy8gUmVsZWFzZXMgdGhlIFZvRVJUUF9SVENQIHN1Yi1BUEkgYW5kIGRlY3JlYXNlcyBhbiBpbnRlcm5hbAogICAgLy8gcmVmZXJlbmNlIGNvdW50ZXIuIFJldHVybnMgdGhlIG5ldyByZWZlcmVuY2UgY291bnQuIFRoaXMgdmFsdWUgc2hvdWxkCiAgICAvLyBiZSB6ZXJvIGZvciBhbGwgc3ViLUFQSTpzIGJlZm9yZSB0aGUgVm9pY2VFbmdpbmUgb2JqZWN0IGNhbiBiZSBzYWZlbHkKICAgIC8vIGRlbGV0ZWQuCiAgICB2aXJ0dWFsIGludCBSZWxlYXNlKCkgPSAwOwoKICAgIC8vIFJlZ2lzdGVycyBhbiBpbnN0YW5jZSBvZiBhIFZvRVJUUE9ic2VydmVyIGRlcml2ZWQgY2xhc3MgZm9yIGEgc3BlY2lmaWVkCiAgICAvLyB8Y2hhbm5lbHwuIEl0IHdpbGwgYWxsb3cgdGhlIHVzZXIgdG8gb2JzZXJ2ZSBjYWxsYmFja3MgcmVsYXRlZCB0byB0aGUKICAgIC8vIFJUUCBwcm90b2NvbCBzdWNoIGFzIGNoYW5nZXMgaW4gdGhlIGluY29taW5nIFNTUkMuCiAgICB2aXJ0dWFsIGludCBSZWdpc3RlclJUUE9ic2VydmVyKGludCBjaGFubmVsLCBWb0VSVFBPYnNlcnZlciYgb2JzZXJ2ZXIpID0gMDsKCiAgICAvLyBEZXJlZ2lzdGVycyBhbiBpbnN0YW5jZSBvZiBhIFZvRVJUUE9ic2VydmVyIGRlcml2ZWQgY2xhc3MgZm9yIGEKICAgIC8vIHNwZWNpZmllZCB8Y2hhbm5lbHwuCiAgICB2aXJ0dWFsIGludCBEZVJlZ2lzdGVyUlRQT2JzZXJ2ZXIoaW50IGNoYW5uZWwpID0gMDsKCiAgICAvLyBSZWdpc3RlcnMgYW4gaW5zdGFuY2Ugb2YgYSBWb0VSVENQT2JzZXJ2ZXIgZGVyaXZlZCBjbGFzcyBmb3IgYSBzcGVjaWZpZWQKICAgIC8vIHxjaGFubmVsfC4KICAgIHZpcnR1YWwgaW50IFJlZ2lzdGVyUlRDUE9ic2VydmVyKAogICAgICAgIGludCBjaGFubmVsLCBWb0VSVENQT2JzZXJ2ZXImIG9ic2VydmVyKSA9IDA7CgogICAgLy8gRGVyZWdpc3RlcnMgYW4gaW5zdGFuY2Ugb2YgYSBWb0VSVENQT2JzZXJ2ZXIgZGVyaXZlZCBjbGFzcyBmb3IgYQogICAgLy8gc3BlY2lmaWVkIHxjaGFubmVsfC4KICAgIHZpcnR1YWwgaW50IERlUmVnaXN0ZXJSVENQT2JzZXJ2ZXIoaW50IGNoYW5uZWwpID0gMDsKCiAgICAvLyBTZXRzIHRoZSBsb2NhbCBSVFAgc3luY2hyb25pemF0aW9uIHNvdXJjZSBpZGVudGlmaWVyIChTU1JDKSBleHBsaWNpdGx5LgogICAgdmlydHVhbCBpbnQgU2V0TG9jYWxTU1JDKGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgc3NyYykgPSAwOwoKICAgIC8vIEdldHMgdGhlIGxvY2FsIFJUUCBTU1JDIG9mIGEgc3BlY2lmaWVkIHxjaGFubmVsfC4KICAgIHZpcnR1YWwgaW50IEdldExvY2FsU1NSQyhpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50JiBzc3JjKSA9IDA7CgogICAgLy8gR2V0cyB0aGUgU1NSQyBvZiB0aGUgaW5jb21pbmcgUlRQIHBhY2tldHMuCiAgICB2aXJ0dWFsIGludCBHZXRSZW1vdGVTU1JDKGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQmIHNzcmMpID0gMDsKCiAgICAvLyBTZXRzIHRoZSBzdGF0dXMgb2YgcnRwLWF1ZGlvLWxldmVsLWluZGljYXRpb24gb24gYSBzcGVjaWZpYyB8Y2hhbm5lbHwuCiAgICB2aXJ0dWFsIGludCBTZXRSVFBBdWRpb0xldmVsSW5kaWNhdGlvblN0YXR1cygKICAgICAgICBpbnQgY2hhbm5lbCwgYm9vbCBlbmFibGUsIHVuc2lnbmVkIGNoYXIgSUQgPSAxKSA9IDA7CgogICAgLy8gU2V0cyB0aGUgc3RhdHVzIG9mIHJ0cC1hdWRpby1sZXZlbC1pbmRpY2F0aW9uIG9uIGEgc3BlY2lmaWMgfGNoYW5uZWx8LgogICAgdmlydHVhbCBpbnQgR2V0UlRQQXVkaW9MZXZlbEluZGljYXRpb25TdGF0dXMoCiAgICAgICAgaW50IGNoYW5uZWwsIGJvb2wmIGVuYWJsZWQsIHVuc2lnbmVkIGNoYXImIElEKSA9IDA7CgogICAgLy8gR2V0cyB0aGUgQ1NSQ3Mgb2YgdGhlIGluY29taW5nIFJUUCBwYWNrZXRzLgogICAgdmlydHVhbCBpbnQgR2V0UmVtb3RlQ1NSQ3MoaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBhcnJDU1JDWzE1XSkgPSAwOwoKICAgIC8vIFNldHMgdGhlIFJUQ1Agc3RhdHVzIG9uIGEgc3BlY2lmaWMgfGNoYW5uZWx8LgogICAgdmlydHVhbCBpbnQgU2V0UlRDUFN0YXR1cyhpbnQgY2hhbm5lbCwgYm9vbCBlbmFibGUpID0gMDsKCiAgICAvLyBHZXRzIHRoZSBSVENQIHN0YXR1cyBvbiBhIHNwZWNpZmljIHxjaGFubmVsfC4KICAgIHZpcnR1YWwgaW50IEdldFJUQ1BTdGF0dXMoaW50IGNoYW5uZWwsIGJvb2wmIGVuYWJsZWQpID0gMDsKCiAgICAvLyBTZXRzIHRoZSBjYW5vbmljYWwgbmFtZSAoQ05BTUUpIHBhcmFtZXRlciBmb3IgUlRDUCByZXBvcnRzIG9uIGEKICAgIC8vIHNwZWNpZmljIHxjaGFubmVsfC4KICAgIHZpcnR1YWwgaW50IFNldFJUQ1BfQ05BTUUoaW50IGNoYW5uZWwsIGNvbnN0IGNoYXIgY05hbWVbMjU2XSkgPSAwOwoKICAgIC8vIEdldHMgdGhlIGNhbm9uaWNhbCBuYW1lIChDTkFNRSkgcGFyYW1ldGVyIGZvciBSVENQIHJlcG9ydHMgb24gYQogICAgLy8gc3BlY2lmaWMgfGNoYW5uZWx8LgogICAgdmlydHVhbCBpbnQgR2V0UlRDUF9DTkFNRShpbnQgY2hhbm5lbCwgY2hhciBjTmFtZVsyNTZdKSA9IDA7CgogICAgLy8gR2V0cyB0aGUgY2Fub25pY2FsIG5hbWUgKENOQU1FKSBwYXJhbWV0ZXIgZm9yIGluY29taW5nIFJUQ1AgcmVwb3J0cwogICAgLy8gb24gYSBzcGVjaWZpYyBjaGFubmVsLgogICAgdmlydHVhbCBpbnQgR2V0UmVtb3RlUlRDUF9DTkFNRShpbnQgY2hhbm5lbCwgY2hhciBjTmFtZVsyNTZdKSA9IDA7CgogICAgLy8gR2V0cyBSVENQIGRhdGEgZnJvbSBpbmNvbWluZyBSVENQIFNlbmRlciBSZXBvcnRzLgogICAgdmlydHVhbCBpbnQgR2V0UmVtb3RlUlRDUERhdGEoCiAgICAgICAgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCYgTlRQSGlnaCwgdW5zaWduZWQgaW50JiBOVFBMb3csCiAgICAgICAgdW5zaWduZWQgaW50JiB0aW1lc3RhbXAsIHVuc2lnbmVkIGludCYgcGxheW91dFRpbWVzdGFtcCwKICAgICAgICB1bnNpZ25lZCBpbnQqIGppdHRlciA9IE5VTEwsIHVuc2lnbmVkIHNob3J0KiBmcmFjdGlvbkxvc3QgPSBOVUxMKSA9IDA7CgogICAgLy8gR2V0cyBSVFAgc3RhdGlzdGljcyBmb3IgYSBzcGVjaWZpYyB8Y2hhbm5lbHwuCiAgICB2aXJ0dWFsIGludCBHZXRSVFBTdGF0aXN0aWNzKAogICAgICAgIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQmIGF2ZXJhZ2VKaXR0ZXJNcywgdW5zaWduZWQgaW50JiBtYXhKaXR0ZXJNcywKICAgICAgICB1bnNpZ25lZCBpbnQmIGRpc2NhcmRlZFBhY2tldHMpID0gMDsKCiAgICAvLyBHZXRzIFJUQ1Agc3RhdGlzdGljcyBmb3IgYSBzcGVjaWZpYyB8Y2hhbm5lbHwuCiAgICB2aXJ0dWFsIGludCBHZXRSVENQU3RhdGlzdGljcyhpbnQgY2hhbm5lbCwgQ2FsbFN0YXRpc3RpY3MmIHN0YXRzKSA9IDA7CgogICAgLy8gU2VuZHMgYW4gUlRDUCBBUFAgcGFja2V0IG9uIGEgc3BlY2lmaWMgfGNoYW5uZWx8LgogICAgdmlydHVhbCBpbnQgU2VuZEFwcGxpY2F0aW9uRGVmaW5lZFJUQ1BQYWNrZXQoCiAgICAgICAgaW50IGNoYW5uZWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3ViVHlwZSwgdW5zaWduZWQgaW50IG5hbWUsCiAgICAgICAgY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgc2hvcnQgZGF0YUxlbmd0aEluQnl0ZXMpID0gMDsKCiAgICAvLyBTZXRzIHRoZSBGb3J3YXJkIEVycm9yIENvcnJlY3Rpb24gKEZFQykgc3RhdHVzIG9uIGEgc3BlY2lmaWMgfGNoYW5uZWx8LgogICAgdmlydHVhbCBpbnQgU2V0RkVDU3RhdHVzKAogICAgICAgIGludCBjaGFubmVsLCBib29sIGVuYWJsZSwgaW50IHJlZFBheWxvYWR0eXBlID0gLTEpID0gMDsKCiAgICAvLyBHZXRzIHRoZSBGRUMgc3RhdHVzIG9uIGEgc3BlY2lmaWMgfGNoYW5uZWx8LgogICAgdmlydHVhbCBpbnQgR2V0RkVDU3RhdHVzKAogICAgICAgIGludCBjaGFubmVsLCBib29sJiBlbmFibGVkLCBpbnQmIHJlZFBheWxvYWR0eXBlKSA9IDA7CgogICAgLy8gU2V0cyB0aGUgUlRQIGtlZXBhbGl2ZSBtZWNoYW5pc20gc3RhdHVzLgogICAgLy8gVGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBtYWludGFpbiBhbiBleGlzdGluZyBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRvcgogICAgLy8gKE5BVCkgbWFwcGluZyB3aGlsZSByZWd1bGFyIFJUUCBpcyBubyBsb25nZXIgdHJhbnNtaXR0ZWQuCiAgICB2aXJ0dWFsIGludCBTZXRSVFBLZWVwYWxpdmVTdGF0dXMoCiAgICAgICAgaW50IGNoYW5uZWwsIGJvb2wgZW5hYmxlLCB1bnNpZ25lZCBjaGFyIHVua25vd25QYXlsb2FkVHlwZSwKICAgICAgICBpbnQgZGVsdGFUcmFuc21pdFRpbWVTZWNvbmRzID0gMTUpID0gMDsKCiAgICAvLyBHZXRzIHRoZSBSVFAga2VlcGFsaXZlIG1lY2hhbmlzbSBzdGF0dXMuCiAgICB2aXJ0dWFsIGludCBHZXRSVFBLZWVwYWxpdmVTdGF0dXMoCiAgICAgICAgaW50IGNoYW5uZWwsIGJvb2wmIGVuYWJsZWQsIHVuc2lnbmVkIGNoYXImIHVua25vd25QYXlsb2FkVHlwZSwKICAgICAgICBpbnQmIGRlbHRhVHJhbnNtaXRUaW1lU2Vjb25kcykgPSAwOwoKICAgIC8vIEVuYWJsZXMgY2FwdHVyaW5nIG9mIFJUUCBwYWNrZXRzIHRvIGEgYmluYXJ5IGZpbGUgb24gYSBzcGVjaWZpYwogICAgLy8gfGNoYW5uZWx8IGFuZCBmb3IgYSBnaXZlbiB8ZGlyZWN0aW9ufC4gVGhlIGZpbGUgY2FuIGxhdGVyIGJlIHJlcGxheWVkCiAgICAvLyB1c2luZyBlLmcuIFJUUCBUb29sc5IgcnRwcGxheSBzaW5jZSB0aGUgYmluYXJ5IGZpbGUgZm9ybWF0IGlzCiAgICAvLyBjb21wYXRpYmxlIHdpdGggdGhlIHJ0cGR1bXAgZm9ybWF0LgogICAgdmlydHVhbCBpbnQgU3RhcnRSVFBEdW1wKAogICAgICAgIGludCBjaGFubmVsLCBjb25zdCBjaGFyIGZpbGVOYW1lVVRGOFsxMDI0XSwKICAgICAgICBSVFBEaXJlY3Rpb25zIGRpcmVjdGlvbiA9IGtSdHBJbmNvbWluZykgPSAwOwoKICAgIC8vIERpc2FibGVzIGNhcHR1cmluZyBvZiBSVFAgcGFja2V0cyB0byBhIGJpbmFyeSBmaWxlIG9uIGEgc3BlY2lmaWMKICAgIC8vIHxjaGFubmVsfCBhbmQgZm9yIGEgZ2l2ZW4gfGRpcmVjdGlvbnwuCiAgICB2aXJ0dWFsIGludCBTdG9wUlRQRHVtcCgKICAgICAgICBpbnQgY2hhbm5lbCwgUlRQRGlyZWN0aW9ucyBkaXJlY3Rpb24gPSBrUnRwSW5jb21pbmcpID0gMDsKCiAgICAvLyBHZXRzIHRoZSB0aGUgY3VycmVudCBSVFAgY2FwdHVyaW5nIHN0YXRlIGZvciB0aGUgc3BlY2lmaWVkCiAgICAvLyB8Y2hhbm5lbHwgYW5kIHxkaXJlY3Rpb258LgogICAgdmlydHVhbCBpbnQgUlRQRHVtcElzQWN0aXZlKAogICAgICAgIGludCBjaGFubmVsLCBSVFBEaXJlY3Rpb25zIGRpcmVjdGlvbiA9IGtSdHBJbmNvbWluZykgPSAwOwoKICAgIC8vIFNlbmRzIGFuIGV4dHJhIFJUUCBwYWNrZXQgdXNpbmcgYW4gZXhpc3RpbmcvYWN0aXZlIFJUUCBzZXNzaW9uLgogICAgLy8gSXQgaXMgcG9zc2libGUgdG8gc2V0IHRoZSBwYXlsb2FkIHR5cGUsIG1hcmtlciBiaXQgYW5kIHBheWxvYWQKICAgIC8vIG9mIHRoZSBleHRyYSBSVFAKICAgIHZpcnR1YWwgaW50IEluc2VydEV4dHJhUlRQUGFja2V0KAogICAgICAgIGludCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIHBheWxvYWRUeXBlLCBib29sIG1hcmtlckJpdCwKICAgICAgICBjb25zdCBjaGFyKiBwYXlsb2FkRGF0YSwgdW5zaWduZWQgc2hvcnQgcGF5bG9hZFNpemUpID0gMDsKCnByb3RlY3RlZDoKICAgIFZvRVJUUF9SVENQKCkge30KICAgIHZpcnR1YWwgflZvRVJUUF9SVENQKCkge30KfTsKCn0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKCiNlbmRpZiAgLy8gI2lmbmRlZiBXRUJSVENfVk9JQ0VfRU5HSU5FX1ZPRV9SVFBfUlRDUF9ICg==