LyoKICogTkVULkVYRSAtIFdpbmUtY29tcGF0aWJsZSBuZXQgcHJvZ3JhbQogKiBOb3J3ZWdpYW4gKEJva23lbCkgbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleGFuZGVyIE4uIFP4cm5lcyA8YWxleEB0aGVoYW5kb2ZhZ29ueS5jb20+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJyZXNvdXJjZXMuaCIKCkxBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKClNUUklOR1RBQkxFCnsKICAgIFNUUklOR19VU0FHRSwgIlByb2dyYW1tZXQgYnJ1a2VzIHNvbSBm+GxnZXI6XG5cbk5FVCBbIEhFTFAgfCBTVEFSVCB8IFNUT1AgIFVTRSBdXG4iCiAgICBTVFJJTkdfU1RBUlRfVVNBR0UsICJPcHBnaSBuYXZuZXQgcOUgdGplbmVyZW4gc29tcyBza2FsIHN0YXJ0ZXMuXG4iCiAgICBTVFJJTkdfU1RPUF9VU0FHRSwgIk9wcGdpIG5hdm5ldCBw5SB0amVuZXJlbiBzb20gc2thbCBzdG9wcGVzLlxuIgogICAgU1RSSU5HX1NUT1BfREVQLCAiU3RvcHBlciBhdmhlbmdpZyB0amVuZXN0ZTogJXNcbiIKICAgIFNUUklOR19DQU5UX1NUT1AsICJLbGFydGUgaWtrZSBzdG9wcGUgdGplbmVzdGVuIKslc7tcbiIKICAgIFNUUklOR19OT19TQ00sICJLbGFydGUgaWtrZSBu5SB0amVuZXN0ZWJlaGFuZGxlcmVuLlxuIgogICAgU1RSSU5HX05PX1NWQ0hBTkRMRSwgIktsYXJ0ZSBpa2tlIG7lIHRqZW5lc3Rlbi5cbiIKICAgIFNUUklOR19TVEFSVF9TVkMsICJUamVuZXN0ZW4gqyVzuyBzdGFydGVyLlxuIgogICAgU1RSSU5HX1NUQVJUX1NWQ19TVUNDRVNTLCAiVGplbmVzdGVuIKslc7sgYmxlIHN0YXJ0ZXQgdmVsbHlra2V0LlxuIgogICAgU1RSSU5HX1NUQVJUX1NWQ19GQUlMLCAiVGplbmVzdGVuIKslc7sga2xhcnRlIGlra2Ugc3RhcnRlLlxuIgogICAgU1RSSU5HX1NUT1BfU1ZDLCAiVGplbmVzdGVuIKslc7sgc3RvcHBlci5cbiIKICAgIFNUUklOR19TVE9QX1NWQ19TVUNDRVNTLCAiVGplbmVzdGVuIKslc7sgYmxlIHN0b3BwZXQgdmVsbHlra2V0LlxuIgogICAgU1RSSU5HX1NUT1BfU1ZDX0ZBSUwsICJLbGFydGUgaWtrZSBzdG9wcGUgdGplbmVzdGVuIKslc7suXG4iCiAgICBTVFJJTkdfSEVMUF9VU0FHRSwgIkhqZWxwIGJydWtlcyBzb20gZvhsZ2VuZGU6XG5cbk5FVCBIRUxQIGtvbW1hbmRvXG4gICAgLWVsbGVyLVxuTkVUIGtvbW1hbmRvIC9IRUxQXG5cbiAgIFRpbGdqZW5nZWxpZ2Uga29tbWFuZG9lcjpcbiAgIE5FVCBIRUxQICAgIE5FVCBTVEFSVCAgICBORVQgU1RPUCAgICBORVQgVVNFXG4iCiAgICBTVFJJTkdfTk9fRU5UUklFUywgIkRldCBlciBpbmdlbiBvcHBm+HJpbmdlciBw5SBsaXN0ZW4uXG4iCiAgICBTVFJJTkdfVVNFX0hFQURFUiwgIlxuU3RhdHVzICAgIExva2FsICAgUmVtb3RlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgIFNUUklOR19VU0VfRU5UUlksICIlcyAgICAgICVTICAgICAgJVMgICAgICDFcG5lIHJlc3N1cnNlcjogJWx1XG4iCn0K