LyoKICogc2VyaWFsdWkuZGxsIChCdWxnYXJpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwNSBNaWxrbyBLcmFjaG91bm92CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfQlVMR0FSSUFOLCBTVUJMQU5HX0RFRkFVTFQKCklERF9TRVJJQUxVSUNPTkZJRyBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjAwLCAxNTkKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19WSVNJQkxFCkNBUFRJT04gItHi7unx8uLgIO3gICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogIExURVhUICAgICAgICAgIsHu5O7i4CD35fHy7vLgIiwgMCw1LDIwLDk1LDEwCiAgQ09NQk9CT1ggICAgICBJRENfQkFVRCwgMTAwLCAyMCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUfENCU19BVVRPSFNDUk9MTHxXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogIExURVhUICAgICAgICAgItfl8u3u8fIiLCAwLDUsNDAsOTUsMTAKICBDT01CT0JPWCAgICAgIElEQ19QQVJJVFksIDEwMCwgNDAsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVHxDQlNfQVVUT0hTQ1JPTEx8V1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBMVEVYVCAgICAgICAgICLK7u3y8O7rIO3gIO/u8u7q4CIsIDAsNSw2MCw5NSwxMAogIENPTUJPQk9YICAgICAgSURDX0ZMT1csIDEwMCwgNjAsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVHxDQlNfQVVUT0hTQ1JPTEx8V1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBMVEVYVCAgICAgICAgICLB6PLu4uUg8SDk4O3t6CIsIDAsNSw4MCw5NSwxMAogIENPTUJPQk9YICAgICAgSURDX0RBVEEsIDEwMCwgODAsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVHxDQlNfQVVUT0hTQ1JPTEx8V1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBMVEVYVCAgICAgICAgICLR8u7vLeHo8u7i5SIsIDAsNSwxMDAsOTUsMTAKICBDT01CT0JPWCAgICAgIElEQ19TVE9QLCAxMDAsIDEwMCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUfENCU19BVVRPSFNDUk9MTHxXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogIERFRlBVU0hCVVRUT04gIk9LIiwgICAgIElET0ssNTAsMTM4LDUwLDE0CiAgUFVTSEJVVFRPTiAgICAizvLs5e3oIiwgSURDQU5DRUwsMTA1LDEzOCw1MCwxNAogIC8qIHRoZXNlIHR3byBidXR0b25zIGFyZSBmb3IgdGVzdGluZyBHZXQvU2V0RGVmYXVsdENvbW1Db25maWcgKi8KICAvKiBQVVNIQlVUVE9OICAgICJHZXREZWZhdWx0IiwgSURfR0VUREVGQVVMVCwzMCwxMTUsNTAsMTQgKi8KICAvKiBQVVNIQlVUVE9OICAgICJTZXREZWZhdWx0IiwgSURfU0VUREVGQVVMVCw4NSwxMTUsNTAsMTQgKi8KRU5ECg==