LyoKICogQ29weXJpZ2h0IDIwMDYgQW5kcmFzIEtvdmFjcwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAid29yZHBhZC5oIgoKTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfREVGQVVMVAoKSURNX01BSU5NRU5VIE1FTlUKQkVHSU4KICAgIFBPUFVQICImRuFqbCIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibaai4uLlx0Q3RybCtOIiwgICAgICAgICAgIElEX0ZJTEVfTkVXCiAgICAgICAgTUVOVUlURU0gIiZNZWdueWl04XMuLi5cdEN0cmwrTyIsIElEX0ZJTEVfT1BFTgogICAgICAgIE1FTlVJVEVNICJNJmVudOlzXHRDdHJsK1MiLCAgICAgICBJRF9GSUxFX1NBVkUKICAgICAgICBNRU5VSVRFTSAiTWVudOlzIG3hJnNr6W50Li4uIiwgICAgICAgIElEX0ZJTEVfU0FWRUFTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZQcmludC4uLlx0Q3RybCtQIiwgIElEX1BSSU5UCiAgICAgICAgTUVOVUlURU0gIlByaW50IHByZXZpZSZ3Li4uIiwgIElEX1BSRVZJRVcKICAgICAgICBNRU5VSVRFTSAiUGFnZSBzZXR1cC4uLiIsICAgICAgSURfUFJJTlRTRVRVUAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImS2ls6XDpcyIsICAgICAgSURfRklMRV9FWElUCiAgICBFTkQKICAgIFBPUFVQICJTeiZlcmtlc3p06XMiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImVmlzc3phdm9u4XNcdEN0cmwrWiIsICAgICAgICBJRF9FRElUX1VORE8KICAgICAgICBNRU5VSVRFTSAiJkVs9XJlXHRDdHJsK1kiLCAgICAgICAgICAgICAgSURfRURJVF9SRURPCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIktpdibhZ+FzXHRDdHJsK1giLCAgICAgICAgICAgIElEX0VESVRfQ1VUCiAgICAgICAgTUVOVUlURU0gIk3hJnNvbOFzXHRDdHJsK0MiLCAgICAgICAgICAgIElEX0VESVRfQ09QWQogICAgICAgIE1FTlVJVEVNICImQmVpbGxlc3p06XNcdEN0cmwrViIsICAgICAgICBJRF9FRElUX1BBU1RFCiAgICAgICAgTUVOVUlURU0gIlT2ciZs6XNcdERlbCIsICAgICAgICAgICAgICAgIElEX0VESVRfQ0xFQVIKICAgICAgICBNRU5VSVRFTSAiTSZpbmRldCBraWplbPZsaVx0Q3RybCtBIiwgICAgSURfRURJVF9TRUxFQ1RBTEwKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZpbmQuLi5cdEN0cmwrRiIsICAgICAgICAgSURfRklORAogICAgICAgIE1FTlVJVEVNICJGaW5kICZuZXh0XHRGMyIsICAgICAgICAgICAgICBJRF9GSU5EX05FWFQKICAgICAgICBNRU5VSVRFTSAiJlJlcGxhY2UuLi5cdEN0cmwrSCIsICAgICAgSURfUkVQTEFDRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJDc2FrICZvbHZhc2hhdPMiLCAgICAgICAgICAgICBJRF9FRElUX1JFQURPTkxZCiAgICAgICAgTUVOVUlURU0gIk3zJmRvc+10dmEiLCAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZJRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiJkV4dHLhayIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiS2lqZWz2bOlzICZpbmZvcm3hY2nzIiwgICAgICAgSURfRURJVF9TRUxFQ1RJT05JTkZPCiAgICAgICAgICAgIE1FTlVJVEVNICJLYXJha3RlciZmb3Jt4XR1bSIsICAgICAgICAgICBJRF9FRElUX0NIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIkEmbGFwcnRlbG1lemV0dCBrYXJha3RlciBmb3Jt4XR1bSIsICAgICAgICAgICBJRF9FRElUX0RFRkNIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIiZCZWtlemTpcyBmb3Jt4XR1bSIsICAgICAgICAgIElEX0VESVRfUEFSQUZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiU3om9nZlZ3N6ZXJ66XMiLCAgICAgICAgICAgICAgSURfRURJVF9HRVRURVhUCiAgICAgICAgRU5ECiAgICBFTkQKICAgIFBPUFVQICImVmlldyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZUb29sYmFyIiwgICAgICAgIElEX1RPR0dMRV9UT09MQkFSCiAgICAgICAgTUVOVUlURU0gIiZGb3JtYXRiYXIiLCAgICAgIElEX1RPR0dMRV9GT1JNQVRCQVIKICAgICAgICBNRU5VSVRFTSAiJlJ1bGVyIiwgICAgICAgICAgSURfVE9HR0xFX1JVTEVSCiAgICAgICAgTUVOVUlURU0gIiZTdGF0dXNiYXIiLCAgICAgIElEX1RPR0dMRV9TVEFUVVNCQVIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk9wdGlvbnMuLi4iLCAgSURfVklFV1BST1BFUlRJRVMKICAgIEVORAogICAgUE9QVVAgIiZJbnNlcnQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImRGF0ZSBhbmQgdGltZS4uLiIsICBJRF9EQVRFVElNRQogICAgRU5ECiAgICBQT1BVUCAiRiZvcm3hdHVtIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkZvbnQuLi4iLCAgICAgICAgICAgICAgICAgIElEX0ZPTlRTRVRUSU5HUwogICAgICAgIE1FTlVJVEVNICImQnVsbGV0IHBvaW50cyIgICAgICAgICAgICAgICAgSURfQlVMTEVUCiAgICAgICAgTUVOVUlURU0gIiZQYXJhZ3JhcGguLi4iICAgICAgICAgICAgICBJRF9QQVJBRk9STUFUCiAgICAgICAgTUVOVUlURU0gIiZUYWJzLi4uIiAgICAgICAgICAgICAgICAgICBJRF9UQUJTVE9QUwogICAgICAgIFBPUFVQICImSOF0dOlyIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImUmVuZHN6ZXJcdEN0cmwrMSIsICAgICAgICAgSURfQkFDS18xCiAgICAgICAgICAgIE1FTlVJVEVNICImU+FyZ+FiYW4ga+lyZW1cdEN0cmwrMiIsICBJRF9CQUNLXzIKICAgICAgICBFTkQKICAgIEVORAogICAgUE9QVVAgIiZIZWxwIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkFib3V0IFdpbmUgV29yZHBhZCIgICAgICAgSURfQUJPVVQKICAgIEVORApFTkQKCklETV9QT1BVUCBNRU5VCkJFR0lOCiAgICBQT1BVUCAiIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiS2l2JuFn4XNcdEN0cmwrWCIsICAgICBJRF9FRElUX0NVVAogICAgICAgIE1FTlVJVEVNICJN4SZzb2zhc1x0Q3RybCtDIiwgICAgIElEX0VESVRfQ09QWQogICAgICAgIE1FTlVJVEVNICImQmVpbGxlc3p06XNcdEN0cmwrViIsIElEX0VESVRfUEFTVEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkJ1bGxldCBwb2ludHMiICAgICAgICBJRF9CVUxMRVQKICAgICAgICBNRU5VSVRFTSAiJlBhcmFncmFwaC4uLiIgICAgICBJRF9QQVJBRk9STUFUCiAgICBFTkQKRU5ECg==