LyoKICogQ29weXJpZ2h0IDIwMDQgSWx5YSBLb3JuaXlrbwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1VLUkFJTklBTiwgU1VCTEFOR19ERUZBVUxUCgpNRU5VXzAwMSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglNRU5VSVRFTSAiJsLl6+jqsyCy6u7t6ugiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIibM4OuzILLq7u3q6CIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICIm0e/o8e7qIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIibP7uTw7uHo9rMiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgUE9QVVAgIibC6OPr/+QiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIibC5evo6rMgsuru7eroIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiJszg67Mgsuru7eroIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJICAgIE1FTlVJVEVNICIm0e/o8e7qIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJICAgIE1FTlVJVEVNICImz+7k8O7h6PazIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBQT1BVUCAiwu/u8P/k6vPi4PLoICay6u7t6ugiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIsfgICbN4Ofi7v4iLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIsfgICbS6O/u7CIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAix+AgJtDu5+yz8O7sIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAix+AgJsTg8u7+IiwJMHgzMwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICAgIE1FTlVJVEVNICImwOLy7uzg8uj37e4iLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICLC6PCz4u3/8uggsuru7eroIiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICLO7e7i6PLoIiwJCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiwvHy4OLo8ugiLAkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiwvHy4OLo8uggz+7x6Ovg7e3/IiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICLR8uLu8Ojy6CIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAize7i4CAm0uXq4CIsCUZDSURNX1NIVklFV19ORVdGT0xERVIKCSAgICBNRU5VSVRFTSAize7i5SAmz+7x6Ovg7e3/IiwJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiwuvg8fLo4u7x8rMiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKLyoKIHNoZWxsdmlldyBpdGVtIG1lbnUKKi8KTUVOVV9TSFZfRklMRSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIiZTZWxlY3QiCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSAiJs/w7uKz5O3o6iIsCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQoJICBNRU5VSVRFTSAiJsKz5Orw6PLoIiwJCUZDSURNX1NIVklFV19PUEVOCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiwugm8LPn4PLoIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIibK7u+z/yIsCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIibR8uLu8Ojy6CDP7vHo6+Dt7f8iLAlGQ0lETV9TSFZJRVdfQ1JFQVRFTElOSwoJICBNRU5VSVRFTSAiwugm5ODr6PLoIiwJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIs/l8OUm6ezl7fPi4PLoIiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImwuvg8fLo4u7x8rMiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKU0hCUlNGT1JGT0xERVJfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMTg4LCAxOTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBEU18zRExPT0sKQ0FQVElPTiAizuPr/+Qg5O4g8uXq6CIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDgwLCAxNzYsIDUwLCAxMiwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiwrPk7LPt4CIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKIAlUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CglXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJNCwgNDAsIDE4MCwgMTIwCn0KClNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxMCwgMTUyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLP8O4gJXMiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzMsIDUwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxMCwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgMzAsIDEwLCAxMzcsIDEwCiBMVEVYVCAiIiwgMTAxLCAzMCwgMjIsIDEzNywgMTAKIExURVhUICLQ7ufw7uHt6OroIFdpbmU6IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiwuLl5LPy/CCz7Cf/IO/w7uPw4OzoLCDy5eroLCDk7urz7OXt8vMg9+gg8OXx8/DxILLt8uXw7eXy8ywgsyBXaW5lIOKz5Orw6Logv/UuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIibCs+Tq8Ojy6DoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiwrPk7LPt4CIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIibO4+v/5C4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJItHys+v87ej2/yIKCUlEU19NWUNPTVBVVEVSCQkizLPpIMru7O8n/vLl8CIKCiAgICAgICAgLyogY29udGV4dCBtZW51cyAqLwoJSURTX1ZJRVdfTEFSR0UJCSImwuXr6OqzILLq7u3q6CIKCUlEU19WSUVXX1NNQUxMCQkiJszg67Mgsuru7eroIgoJSURTX1ZJRVdfTElTVAkJIibR7+jx7uoiCglJRFNfVklFV19ERVRBSUxTCSImz+7k8O7h6PazIgoJSURTX1NFTEVDVAkJIsLoJuHw4PLoIgoJSURTX09QRU4JCSLCsybk6vDo8ugiCgoJSURTX0NSRUFURUZPTERFUl9ERU5JRUQgIs3lIOLk4Ovu8f8g8fLi7vDo8ugg7e7i8yDy5erzOiDCs+Ts7uLgIPMg5O7x8vPvsy4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIs/u7Ojr6uAg7/DoIPHy4u7w5e3tsyDt7uLuvyDy5eroIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiz7Pk8uLl8OTm5e3t/yDi6Ovz9+Xt7f8g9ODp6/MiCglJRFNfREVMRVRFRk9MREVSX0NBUFRJT04gIs+z5PLi5fDk5uXt7f8g4ujr8/fl7e3/IPLl6ugiCglJRFNfREVMRVRFSVRFTV9URVhUICLC6CDi7+Xi7eXtsywg+e4g9e735fLlIOLo6/P36PLoICclMSc/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIsLoIOLv5eLt5e2zLCD57iD17vfl8uUg4ujr8/fo8ugg9rMgJTEg5evl7OXt8ugos+IpPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIlRoaXMgZm9sZGVyIGFscmVhZHkgY29udGFpbnMgYSBmaWxlIGNhbGxlZCAnJTEnLlxuXG5EbyB5b3Ugd2FudCB0byByZXBsYWNlIGl0PyIKCUlEU19PVkVSV1JJVEVGSUxFX0NBUFRJT04gIs+z5PLi5fDk5uXt7f8gz+Xw5efg7+jx8yDU4Onr8yIKCUlEU19PVkVSV1JJVEVGT0xERVJfVEVYVCAiVGhpcyBmb2xkZXIgYWxyZWFkeSBjb250YWlucyBhIGZvbGRlciBuYW1lZCAnJTEnLlxuXG4iXAoJICAgICJJZiB0aGUgZmlsZXMgaW4gdGhlIGRlc3RpbmF0aW9uIGZvbGRlciBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIGZpbGVzIGluIHRoZVxuIlwKCSAgICAic2VsZWN0ZWQgZm9sZGVyIHRoZXkgd2lsbCBiZSByZXBsYWNlZC4gRG8geW91IHN0aWxsIHdhbnQgdG8gbW92ZSBvciBjb3B5XG4iXAoJICAgICJ0aGUgZm9sZGVyPyIKCi8qCWNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldwkqLwoJSURTX1NIVl9DT0xVTU4xCQki1ODp6yIKCUlEU19TSFZfQ09MVU1OMgkJItDu5+yz8CIKCUlEU19TSFZfQ09MVU1OMwkJItLo7yIKCUlEU19TSFZfQ09MVU1ONAkJIsfss+3l7e4iCglJRFNfU0hWX0NPTFVNTjUJCSLA8vDo4fPy6CIKCUlEU19TSFZfQ09MVU1ONgkJItDu5+yz8CIKCUlEU19TSFZfQ09MVU1ONwkJIsKz6/zt6Okg0O7n7LPwIgoKCUlEU19ORVdGT0xERVIJCSJOZXcgRm9sZGVyIgp9Cg==