LyoKICogQ3plY2ggcmVzb3VyY2VzIG9yIG9sZWRsZwogKiBDb3B5cmlnaHQgMjAwMyBVbHJpY2ggQ3pla2FsbGEgZm9yIENvZGVXZWF2ZXJzCiAqIENvcHlyaWdodCAyMDA0IERhdmlkIEtyZWRiYQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKClVJSU5TRVJUT0JKRUNUIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjk0LCAxNTEKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiVmxvvml0IG9iamVrdCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTElTVEJPWCAgICAgICAgIElEQ19PQkpUWVBFTElTVCw4MiwxOSwxMzEsNjYsTEJTX1NPUlQgfAogICAgICAgICAgICAgICAgICAgIExCU19OT0lOVEVHUkFMSEVJR0hUIHwgV1NfVklTSUJMRSB8IFdTX1ZTQ1JPTEwgfAogICAgICAgICAgICAgICAgICAgIFdTX1RBQlNUT1AKICAgIExURVhUICAgICAgICAgICAiVHlwIG9iamVrdHU6IixJRENfT0JKVFlQRUxCTCw4Miw3LDUzLDgsV1NfVklTSUJMRQogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywyMjEsNyw2NiwxNAogICAgUFVTSEJVVFRPTiAgICAgICJTdG9ybm8iLElEQ0FOQ0VMLDIyMSwyNCw2NiwxNAogICAgR1JPVVBCT1ggICAgICAgICJW/XNsZWRlayIsSURDX1JFU1VMVCw3LDEwMywyMDgsNDEKICAgIENPTlRST0wgICAgICAgICAiVnl0dm/4aXQgbm92/SIsSURDX0NSRUFURU5FVywiQnV0dG9uIixCU19BVVRPUkFESU9CVVRUT04gfCAKICAgICAgICAgICAgICAgICAgICBXU19HUk9VUCw3LDIwLDYyLDEwCiAgICBDT05UUk9MICAgICAgICAgIlZ5dHZv+Gl0IHByb3BvamVu7SIsSURDX0NSRUFURUNPTlRST0wsIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT1JBRElPQlVUVE9OIHwgTk9UIFdTX1ZJU0lCTEUsNyw1NCw2MiwxMAogICAgQ09OVFJPTCAgICAgICAgICJWeXR2b/hpdCB6ZSBzb3Vib3J1IixJRENfQ1JFQVRFRlJPTUZJTEUsIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT1JBRElPQlVUVE9OLDcsMzcsNjcsMTAKICAgIExURVhUICAgICAgICAgICAiIixJRENfUkVTVUxUREVTQyw0OSwxMTIsMTU5LDIzCiAgICBQVVNIQlVUVE9OICAgICAgIlD4aWQmYXQgcHJvcG9qZW7tLi4uIixJRENfQUREQ09OVFJPTCw4MSw4OCw2MywxNCxOT1QgV1NfVklTSUJMRQogICAgQ09OVFJPTCAgICAgICAgICJab2JyYXppdCBqYWtvIGlrb251IixJRENfQVNJQ09OLCJCdXR0b24iLEJTX0FVVE9DSEVDS0JPWCB8IAogICAgICAgICAgICAgICAgICAgIFdTX1RBQlNUT1AgfCBOT1QgV1NfVklTSUJMRSwyMjMsNTgsNjQsMTAKICAgIFBVU0hCVVRUT04gICAgICAiUHJvY2jhemV0Li4uIixJRENfQlJPV1NFLDgzLDUzLDUwLDE0LE5PVCBXU19WSVNJQkxFCiAgICBMVEVYVCAgICAgICAgICAgIlNvdWJvcjoiLElEQ19GSUxFTEJMLDgzLDI3LDIwLDgsIE5PVCBXU19WSVNJQkxFCiAgICBFRElUVEVYVCAgICAgICAgSURDX0ZJTEUsODMsMzcsMTMyLDEzLEVTX0FVVE9IU0NST0xMIHwgTk9UIFdTX1ZJU0lCTEUKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgSURTX1JFU1VMVE9CSkRFU0MJIlZsb75lbiBub3b9ICVzIG9iamVrdCBkbyBWYbllaG8gZG9rdW1lbnR1IgogIElEU19SRVNVTFRGSUxFT0JKREVTQwkiVmxvvmVuIG9ic2FoIHNvdWJvcnUgamFrbyBvYmpla3QgZG8gVmG5ZWhvIGRva3VtZW50dSwgdGFrvmUgaG8gbfm+ZXRlIHVwcmF2aXQgcHJvZ3JhbWVtLCBrdGVy/W0gYnlsIHZ5dHZv+GVuLiIKICBJRFNfQlJPV1NFICAgICAgICAgICAgIlByb2No4XpldCIKICBJRFNfTk9UT0xFTU9EICAgICAgICAgIlNvdWJvciBuZW7tIHBsYXRu/W0gT0xFIG1vZHVsZW0uIE5lbHplIHJlZ2lzdHJvdmF0IE9MRSBwcm9wb2plbu0uIgogIElEU19OT1RPTEVNT0RDQVBUSU9OICAiUPhpZGF0IHByb3BvamVu7SIKfQo=