LyoKICogUG9saXNoIGxhbmd1YWdlIHJlc291cmNlIGZpbGUgZm9yIENyZWRlbnRpYWxzIFVJCiAqCiAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTaGVhcm1hbiAoZm9yIENvZGVXZWF2ZXJzKQogKiBDb3B5cmlnaHQgMjAwNyBNaWtvbGFqIFphbGV3c2tpCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUE9MSVNILCBTVUJMQU5HX0RFRkFVTFQKCklERF9DUkVERElBTE9HIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjEzLCAxNDkKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IERTX0NFTlRFUiB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiSURTX1RJVExFRk9STUFUIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBDT05UUk9MICAgICAgICAgSURCX0JBTk5FUiwtMSwiU3RhdGljIixTU19CSVRNQVAgfCBTU19DRU5URVJJTUFHRSwwLAogICAgICAgICAgICAgICAgICAgIDAsMjEzLDM3CiAgICBMVEVYVCAgICAgICAgICAgIklEU19NRVNTQUdFRk9STUFUIixJRENfTUVTU0FHRSw4LDQ4LDE5OSw4LE5PVCBXU19HUk9VUAogICAgTFRFWFQgICAgICAgICAgICImVb95dGtvd25pazoiLC0xLDgsNjIsNzIsMTIsU1NfQ0VOVEVSSU1BR0UKICAgIENPTlRST0wgICAgICAgICAiIixJRENfVVNFUk5BTUUsIkNvbWJvQm94RXgzMiIsQ0JTX0RST1BET1dOIHwKICAgICAgICAgICAgICAgICAgICBDQlNfTk9JTlRFR1JBTEhFSUdIVCB8IFdTX1RBQlNUT1AsODAsNjIsMTI2LDg3CiAgICBMVEVYVCAgICAgICAgICAgIiZIYXOzbzoiLC0xLDgsODAsNzIsMTIsU1NfQ0VOVEVSSU1BR0UKICAgIEVESVRURVhUICAgICAgICBJRENfUEFTU1dPUkQsODAsODAsMTI2LDEyLEVTX1BBU1NXT1JEIHwgRVNfQVVUT0hTQ1JPTEwKICAgIENPTlRST0wgICAgICAgICAiJlphcGFtaep0YWogaGFzs28iLElEQ19TQVZFLCJCdXR0b24iLAogICAgICAgICAgICAgICAgICAgIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsODAsOTgsMTI2LDEyCiAgICBERUZQVVNIQlVUVE9OICAgIiZPSyIsSURPSyw5NywxMjgsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiJkFudWx1aiIsSURDQU5DRUwsMTU2LDEyOCw1MCwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19USVRMRUZPUk1BVCAgICAgIlBvs7ljeiB6ICVzIgogICAgSURTX01FU1NBR0VGT1JNQVQgICAio7ljemVuaWUgeiAlcyIKICAgIElEU19JTkNPUlJFQ1RQQVNTV09SRFRJVExFICAiTG9nb3dhbmllIG5pZSBwb3dpb2SzbyBzaeoiCiAgICBJRFNfSU5DT1JSRUNUUEFTU1dPUkQgICAgICAgIlVwZXduaWogc2nqLCC/ZSBuYXp3YSB1v3l0a293bmlrYVxuaSBoYXOzbyBzuSBwb3ByYXduZS4iCiAgICBJRFNfQ0FQU0xPQ0tPTlRJVExFICJDYXBzIExvY2sgamVzdCB3s7ljem9ueSIKICAgIElEU19DQVBTTE9DS09OICAgICAgIlezuWN6b255IHRyeWIgQ2FwcyBMb2NrIG1vv2Ugc3Bvd29kb3dh5iwgv2Ugd3Bpc3plc3ogaGFzs28gbmllcG9wcmF3bmllLlxuXG5OYWNpnG5payBrbGF3aXN6IENhcHMgTG9jayBrZXkgbmEga2xhd2lhdHVyemUsIGFieSBnbyB3ebO5Y3p55lxucHJ6ZWQgd3Byb3dhZHplbmllbSBoYXOzYS4iCn0K