LyoKICogSGVscCBWaWV3ZXIgQ3plY2ggcmVzb3VyY2VzCiAqCiAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKICogQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUKICogQ29weXJpZ2h0IDIwMDQgRGF2aWQgS3JlZGJhCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCi8qIE1lbnUgKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfQ1pFQ0gsIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJlNvdWJvciIgewogIE1FTlVJVEVNICImT3RldjU5dCIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZUaXNrIiwgTU5JRF9GSUxFX1BSSU5UCiAgTUVOVUlURU0gIk5hJnN0YXZlbu0gdGlza3UuLi4iLCBNTklEX0ZJTEVfU0VUVVAKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZLb25lYyIsIE1OSURfRklMRV9FWElUCiB9CiBQT1BVUCAi2nByYXYmeSIgewogICBNRU5VSVRFTSAiJktvcO1yb3ZhdC4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiUCZvem5hbWVuYXQgc2kuLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICImWuFsb75rYSIgewogICBNRU5VSVRFTSAiUPhpJmRhdC4uLiIsIE1OSURfQktNS19ERUZJTkUKIH0KIFBPUFVQICImTuFwb3bsZGEiIHsKICAgTUVOVUlURU0gIk7hcCZvduxkYSBrIG7hcG927GTsIiwgTU5JRF9IRUxQX0hFTFBPTgogICBNRU5VSVRFTSAiVr5keSBuYSAmdnJjaHUiLCBNTklEX0hFTFBfSEVMUFRPUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZJbmZvcm1hY2UuLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIk8gJldJTkUiLCBNTklEX0hFTFBfV0lORQojZW5kaWYKIH0KfQoKLyogU3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKewpTVElEX1dJTkVfSEVMUCwgCSJO4XBvduxkYSBXSU5FIgpTVElEX1dIRVJST1IsIAkJIkNIWUJBIgpTVElEX1dBUk5JTkcsICAJCSJWQVJPVsFOzSIKU1RJRF9JTkZPLCAgCQkiSW5mb3JtYWNlIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgCSJOZW7tIGltcGxlbWVudG924W5vIgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSJOZWx6ZSBw+GXo7XN0IHNvdWJvciBu4XBvduxkeSBgJXMnIgpTVElEX0NPTlRFTlRTLCAJCSImT2JzYWgiClNUSURfU0VBUkNILCAJCSImSGxlZGF0IgpTVElEX0JBQ0ssIAkJIiZacOx0IgpTVElEX0hJU1RPUlksIAkJIiZIaXN0b3JpZSIKU1RJRF9UT1BJQ1MsCQkiJlTpbWF0YSIKU1RJRF9BTExfRklMRVMsIAkiVrllY2hueSBzb3Vib3J5ICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIlNvdWJvcnkgbuFwb3bsZHkgKCouaGxwKSIKfQo=