LyoKICogQ29weXJpZ2h0IDIwMDQgYnkgS3J6eXN6dG9mIEZvbHRtYW4KICogQ29weXJpZ2h0IDIwMDYgYnkgTWlrb2xhaiBaYWxld3NraQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1BPTElTSCwgU1VCTEFOR19ERUZBVUxUCgpNQUlOTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlBsaWsiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImTm93eVx0Q3RybCtOIiwgICAgICAgICAgIElEX0ZJTEVfTkVXCiAgICAgICAgTUVOVUlURU0gIiZPdHfzcnouLi5cdEN0cmwrTyIsICAgICAgSURfRklMRV9PUEVOCiAgICAgICAgTUVOVUlURU0gIiZaYXBpc3pcdEN0cmwrUyIsICAgICAgICAgSURfRklMRV9TQVZFCiAgICAgICAgTUVOVUlURU0gIlomYXBpc3ogamFrby4uLiIsICAgICAgICAgSURfRklMRV9TQVZFQVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiWmEma2/xY3oiLCAgICAgICAgIElEX0ZJTEVfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJkVkeWNqYSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZDb2ZuaWpcdEN0cmwrWiIsICAgICAgICAgICAgICAgSURfRURJVF9VTkRPCiAgICAgICAgTUVOVUlURU0gIiZQb3d083J6XHRDdHJsK1kiLCAgICAgICAgICAgICAgIElEX0VESVRfUkVETwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJXeSZ0bmlqXHRDdHJsK1giLCAgICAgICAgICAgICAgICBJRF9FRElUX0NVVAogICAgICAgIE1FTlVJVEVNICImS29waXVqXHRDdHJsK0MiLCAgICAgICAgICAgICAgIElEX0VESVRfQ09QWQogICAgICAgIE1FTlVJVEVNICJXa2wmZWpcdEN0cmwrViIsICAgICAgICAgICAgICAgIElEX0VESVRfUEFTVEUKICAgICAgICBNRU5VSVRFTSAiJlVzdfFcdERlbCIsICAgICAgICAgICAgICAgICAgICBJRF9FRElUX0NMRUFSCiAgICAgICAgTUVOVUlURU0gIiZaYXpuYWN6IHdzenlzdGtvXHRDdHJsK0EiLCAgICAgICAgIElEX0VESVRfU0VMRUNUQUxMCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZGaW5kIC4gLiAuXHRDcnRsK0YiLCAgICAgICAgICAgSURfRklORAogICAgICAgIE1FTlVJVEVNICJGaW5kICZuZXh0XHRGMyIsICAgICAgICAgICAgICAgIElEX0ZJTkRfTkVYVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJUeWxrbyBkbyAmb2Rjenl0dSIsICAgICAgICAgICAgICAgICAgSURfRURJVF9SRUFET05MWQogICAgICAgIE1FTlVJVEVNICImWm1vZGlmeWtvd2FueSIsICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZJRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiJkRvZGF0a2kiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIlphem5hY3plbmllIC0gJmluZm8iLCAgICAgICAgICAgICBJRF9FRElUX1NFTEVDVElPTklORk8KICAgICAgICAgICAgTUVOVUlURU0gIiZGb3JtYXQgem5ha/N3IiwgICAgICAgICAgIElEX0VESVRfQ0hBUkZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiJlN0YW5kYXJkb3d5IGZvcm1hdCB6bmFr83ciLCAgICAgICAgICAgSURfRURJVF9ERUZDSEFSRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICJGb3JtYXQgYWthJnBpdHUiLCAgICAgICAgICAgSURfRURJVF9QQVJBRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICImUG9iaWW/IHRla3N0IiwgICAgICAgICAgICAgICAgICAgSURfRURJVF9HRVRURVhUCiAgICAgICAgRU5ECiAgICBFTkQKICAgIFBPUFVQICImVmlldyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZUb29sYmFyIiwgICAgICAgIElEX1RPR0dMRV9UT09MQkFSCiAgICAgICAgTUVOVUlURU0gIiZGb3JtYXRiYXIiLCAgICAgIElEX1RPR0dMRV9GT1JNQVRCQVIKICAgICAgICBNRU5VSVRFTSAiJlN0YXR1c2JhciIsICAgICAgSURfVE9HR0xFX1NUQVRVU0JBUgogICAgRU5ECiAgICBQT1BVUCAiJkluc2VydCIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZEYXRlIGFuZCB0aW1lIC4gLiAuIiwgIElEX0RBVEVUSU1FCiAgICBFTkQKICAgIFBPUFVQICJGJm9ybWF0IgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkJ1bGxldCBwb2ludHMiICAgICAgICAgICAgICAgIElEX0JVTExFVAogICAgICAgIFBPUFVQICImVLNvIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImU3lzdGVtXHRDdHJsKzEiLCAgICAgICAgIElEX0JBQ0tfMQogICAgICAgICAgICBNRU5VSVRFTSAiJlBvc3RUaGF0ICi/87N0eSlcdEN0cmwrMiIsICAgICAgICAgICBJRF9CQUNLXzIKICAgICAgICBFTkQKICAgICAgICBQT1BVUCAiJld5cvN3bmFuaWUiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIkRvICZsZXdlalx0Q3RybCtMIiwgICAgICAgICBJRF9BTElHTl9MRUZUCiAgICAgICAgICAgIE1FTlVJVEVNICImV3mccm9ka293YW5pZVx0Q3RybCtFIiwgICAgICAgSURfQUxJR05fQ0VOVEVSCiAgICAgICAgICAgIE1FTlVJVEVNICJEbyAmUHJhd2VqXHRDdHJsK1IiLCAgICAgICAgSURfQUxJR05fUklHSFQKICAgICAgICBFTkQKICAgIEVORApFTkQKCklERF9EQVRFVElNRSBESUFMT0cgRElTQ0FSREFCTEUgMzAsIDIwLCAxMzAsIDgwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJEYXRlIGFuZCB0aW1lIgpGT05UIDEwLCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIExURVhUICAgICAgICAiQXZhaWxhYmxlIGZvcm1hdHMiLDAsMywyLDEwMCwxNQogICAgTElTVEJPWCAgICAgIElEQ19EQVRFVElNRSwzLDEyLDgwLDY1LExCU19OT0lOVEVHUkFMSEVJR0hUCiAgICBQVVNIQlVUVE9OICAgIiZPSyIsSURPSyw4NywxMiw0MCwxMgogICAgUFVTSEJVVFRPTiAgICImQ2FuY2VsIixJRENBTkNFTCw4NywyNiw0MCwxMgpFTkQKCklERF9ORVdGSUxFIERJQUxPRyBESVNDQVJEQUJMRSAzMCwgMjAsIDE0MCwgODAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk5ldyIKRk9OVCAxMCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgIk5ldyBkb2N1bWVudCB0eXBlIiwwLDMsMiwxMDAsMTUKICAgIExJU1RCT1ggICAgICBJRENfTkVXRklMRSwzLDEyLDkwLDY1LExCU19OT0lOVEVHUkFMSEVJR0hUCiAgICBQVVNIQlVUVE9OICAgIiZPSyIsSURPSyw5NywxMiw0MCwxMgogICAgUFVTSEJVVFRPTiAgICImQ2FuY2VsIixJRENBTkNFTCw5NywyNiw0MCwxMgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBTVFJJTkdfUklDSFRFWFRfRklMRVNfUlRGLCAgICAgIlRla3N0IHNmb3JtYXRvd2FueSAtIFJURiAoKi5ydGYpIgogICAgU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICJEb2t1bWVudCB0ZWtzdG93eSAoKi50eHQpIgogICAgU1RSSU5HX1RFWFRfRklMRVNfVU5JQ09ERV9UWFQsICJVbmljb2RlIHRleHQgZG9jdW1lbnQgKCoudHh0KSIKICAgIFNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAiV3N6eXN0a2llIGRva3VtZW50eSAoKi4qKSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgU1RSSU5HX05FV0ZJTEVfUklDSFRFWFQsICAgICAiUmljaCB0ZXh0IGRvY3VtZW50IgogICAgU1RSSU5HX05FV0ZJTEVfVFhULCAgICAgICAgICAiVGV4dCBkb2N1bWVudCIKICAgIFNUUklOR19ORVdGSUxFX1RYVF9VTklDT0RFLCAgIlVuaWNvZGUgdGV4dCBkb2N1bWVudCIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgU1RSSU5HX0RFRkFVTFRfRklMRU5BTUUsICAgICAiRG9jdW1lbnQiCiAgICBTVFJJTkdfUFJPTVBUX1NBVkVfQ0hBTkdFUywgICJTYXZlIGNoYW5nZXMgdG8gJyVzJz8iCiAgICBTVFJJTkdfU0VBUkNIX0ZJTklTSEVELCAgICAgICJGaW5pc2hlZCBzZWFyY2hpbmcgdGhlIGRvY3VtZW50LiIKICAgIFNUUklOR19MT0FEX1JJQ0hFRF9GQUlMRUQsICAgIkZhaWxlZCB0byBsb2FkIHRoZSBSaWNoRWRpdCBsaWJyYXJ5LiIKICAgIFNUUklOR19TQVZFX0xPU0VGT1JNQVRUSU5HLCAgIllvdSBoYXZlIGNob3NlbiB0byBzYXZlIGluIHBsYWluIHRleHQgZm9ybWF0LCAiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoaWNoIHdpbGwgY2F1c2UgYWxsIGZvcm1hdHRpbmcgdG8gYmUgbG9zdC4gIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2lzaCB0byBkbyB0aGlzPyIKRU5ECg==