LyoKICogVHVya2lzaCBSZXNvdXJjZXMgZm9yIFdvcmRwYWQKICoKICogQ29weXJpZ2h0IDIwMDYgRmF0aWggQf79Y/0gPGZhc2ljaUBsaW51eC1zZXZlbmxlci5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfVFVSS0lTSCwgU1VCTEFOR19ERUZBVUxUCgpNQUlOTUVOVSBNRU5VIERJU0NBUkRBQkxFIApCRUdJTgogICAgUE9QVVAgIiZEb3N5YSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZZZW5pIiwgICAgICAgICBJRF9GSUxFX05FVwogICAgICAgIE1FTlVJVEVNICImQeciLCAgICAgICAgICAgSURfRklMRV9PUEVOCiAgICAgICAgTUVOVUlURU0gIiZLYXlkZXQiLCAgICAgICBJRF9GSUxFX1NBVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJsf9ayIsICAgICAgICAgIElEX0ZJTEVfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJkT8emVuIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkdlcmkgQWxcdEN0cmwrWiIsICAgICAgICAgICAgSURfRURJVF9VTkRPCiAgICAgICAgTUVOVUlURU0gIiZZaW5lbGVcdEN0cmwrWSIsICAgICAgICAgICAgIElEX0VESVRfUkVETwogICAgICAgIE1FTlVJVEVNICImVPxt/G78IHNl51x0Q3RybCtBIiwgICAgICAgICBJRF9FRElUX1NFTEVDVEFMTAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJLZSZzXHRDdHJsK1giLCAgICAgICAgICAgICAgICBJRF9FRElUX0NVVAogICAgICAgIE1FTlVJVEVNICImS29weWFsYVx0Q3RybCtDIiwgICAgICAgICAgICBJRF9FRElUX0NPUFkKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiU2FsdC0mb2t1bnVyIiwgICAgICAgICAgICAgICAgSURfRURJVF9SRUFET05MWQogICAgICAgIE1FTlVJVEVNICImRGXwaf5taf4iLCAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGSUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgUE9QVVAgIkQmafBlcmxlcmkiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIlNl52ltICZiaWxnaXNpIiwgICAgICAgICAgICAgIElEX0VESVRfU0VMRUNUSU9OSU5GTwogICAgICAgICAgICBNRU5VSVRFTSAiS2FyYWt0ZXIgYmkm52ltaSIsICAgICAgICAgICAgSURfRURJVF9DSEFSRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICIm1m50YW79bWz9IGthci4gYmnnaW1pIiwgICAgICBJRF9FRElUX0RFRkNIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIlBhcmFncmEmZiBiaedpbWkiLCAgICAgICAgICAgIElEX0VESVRfUEFSQUZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiJk1ldG5pIGFsIiwgICAgICAgICAgICAgICAgICAgSURfRURJVF9HRVRURVhUCiAgICAgICAgRU5ECiAgICBFTkQKICAgIFBPUFVQICImQmnnaW0iCiAgICBCRUdJTgogICAgICAgIFBPUFVQICImQXJrYXBsYW4iCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIlMmaXN0ZW1cdEN0cmwrMSIsICAgICAgICAgSURfQkFDS18xCiAgICAgICAgICAgIE1FTlVJVEVNICImU2Fy/W10/XJha1x0Q3RybCsyIiwgICAgIElEX0JBQ0tfMgogICAgICAgIEVORAogICAgICAgIFBPUFVQICImSGl6YWxhbWEiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIlMmb2xcdEN0cmwrTCIsICAgICAgICAgIElEX0FMSUdOX0xFRlQKICAgICAgICAgICAgTUVOVUlURU0gIk8mcnRhXHRDdHJsK0UiLCAgICAgICAgIElEX0FMSUdOX0NFTlRFUgogICAgICAgICAgICBNRU5VSVRFTSAiUyZh8Fx0Q3RybCtSIiwgICAgICAgICAgSURfQUxJR05fUklHSFQKICAgICAgICBFTkQKICAgIEVORApFTkQK