LyoKICogVW5pbnN0YWxsZXIgKERhbmlzaCBSZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDA4IEplbnMgQWxicmV0c2VuIDxqZW5zQGFsYnJldHNlbi5kaz4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19EQU5JU0gsIFNVQkxBTkdfREVGQVVMVAoKSUREX1VOSU5TVEFMTEVSIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMzMwLCAxNjAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkFmaW5zdGFsbGVyIHByb2dyYW1tZXIiCkZPTlQgMTAsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICJW5mxnIGRldCBwcm9ncmFtIGR1IPhuc2tlciBhdCBhZmluc3RhbGxlcmU6IixJRENfUExFQVNFU0VMRUNULDEwLDEwLDI1MCwxNAogICAgRURJVFRFWFQgICAgICAgIElEQ19GSUxURVIsMTAsMjUsMjUwLDE0LEVTX0FVVE9IU0NST0xMCiAgICBMSVNUQk9YICAgICAgICAgSURDX0xJU1QsMTAsNDMsMjUwLDEwNixMQlNfTk9JTlRFR1JBTEhFSUdIVCB8CiAgICAgICAgICAgICAgICAgICAgTEJTX0VYVEVOREVEU0VMIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAiQSZmaW5zdGFsbGVyIixJRENfVU5JTlNUQUxMLDI3MCw0OCw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICImT20iLElEQ19BQk9VVCwyNzAsNjUsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiJkx1ayIsSURDX0VYSVQsMjcwLDgxLDUwLDE0CkVORAoKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIHsKICAgICBJRFNfQVBQTkFNRSwgIkFmaW5zdGFsbGVyIHByb2dyYW1tZXIiCiAgICAgSURTX0FCT1VULCAiT3ZlcnNhdCBhZiBKZW5zIEFsYnJldHNlblxuT3BoYXZzcmV0IDIwMDUgZm9yIGFmaW5zdGFsbGVyaW5nc3bmcmt0+GpldCB0aWxo+HJlciBBbmRyZWFzIE1vaHIsIEhhbm51IFZhbHRvbmVuIG9nIEpvbmF0aGFuIEVybnN0LiIKICAgICBJRFNfQUJPVVRUSVRMRSwgIk9tIgogICAgIElEU19SRUdJU1RSWUtFWU5PVEFWQUlMQUJMRSwgIkFmaW5zdGFsbGVyIHJlZ2lzdGVyaW5nc2RhdGFiYXNlIHbmcmRpIGVyIGlra2UgdGlsZ+ZuZ2VsaWcgKGVuZG51KTsgaW5nZW50aW5nIGF0IGf4cmUuIgogICAgIElEU19VTklOU1RBTExGQUlMRUQsICJL+HJpbmcgYWYgYWZpbnN0YWxsZXJpbmdzIGtvbW1hbmRvZW4gJyVzJyBmZWpsZWRlLCBt5XNrZSBlciBkZXQgcOUgZ3J1bmQgYWYgZW4gbWFuZ2xlbmRlIHByb2dyYW1maWwuXHJcblZpbCBkdSBmamVybmUgYWZpbnN0YWxsZXJpbmdzIG9wZvhyc2VsZW4gZnJhIHJlZ2lzdGVyaW5nc2RhdGFiYXNlbj8iCn0K