LyogdmVyc2lvbmluZm8ucmMuaW4gLSBmb3IgZGJ1cwogKiBDb3B5cmlnaHQgKEMpIDIwMDUgZzEwIENvZGUgR21iSAogKiAKICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcwogKiB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dCBldmVuIHRoZQogKiBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICovCiAKLyogVGhpcyBmaWxlIGlzIHByb2Nlc3NlZCBieSBjb25maWd1cmUgdG8gY3JlYXRlIHZlcnNpb25pbmZvLnJjICovCgojbGluZSBfX0xJTkVfXyAidmVyc2lvbmluZm8ucmMuaW4iCgojaW5jbHVkZSA8YWZ4cmVzLmg+CgoKVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCiBGSUxFVkVSU0lPTiBAQlVJTERfRklMRVZFUlNJT05ACiBQUk9EVUNUVkVSU0lPTiBAQlVJTERfRklMRVZFUlNJT05ACiBGSUxFRkxBR1NNQVNLIDB4M2ZMCiNpZmRlZiBfREVCVUcKIEZJTEVGTEFHUyAweDIxTAojZWxzZQogRklMRUZMQUdTIDB4MjBMCiNlbmRpZgogRklMRU9TIDB4NDAwMDRMCiBGSUxFVFlQRSAweDFMCiBGSUxFU1VCVFlQRSAweDBMCkJFR0lOCiAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIEJMT0NLICIwNDA5MDRiMCIKICAgICAgICBCRUdJTgogICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiUHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXDAiCiAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJGcmVlRGVza3RvcC5vcmdcMCIKICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJkYnVzIC0gRnJlZURlc2t0b3AgbWVzc2FnZSBidXMgc3lzdGVtXDAiCiAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICJAREJVU19WRVJTSU9OQFwwIgogICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImRidXNcMCIKICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIDIwMDkgRnJlZURlc2t0b3Aub3JnXDAiCiAgICAgICAgICAgIFZBTFVFICJMZWdhbFRyYWRlbWFya3MiLCAiXDAiCiAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImRidXMtMS5kbGxcMCIKICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcMCIKICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgImRidXNcMCIKICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIkBEQlVTX1ZFUlNJT05AXDAiCiAgICAgICAgICAgIFZBTFVFICJTcGVjaWFsQnVpbGQiLCAiQEJVSUxEX1RJTUVTVEFNUEBcMCIKICAgICAgICBFTkQKICAgIEVORApFTkQKCg==