LyoKICogSGVscCBWaWV3ZXIgKFJ1c3NpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBJZ29yIFN0ZXBpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJtTg6esiIHsKICBNRU5VSVRFTSAiJs7y6vD78vwiLCBNTklEX0ZJTEVfT1BFTgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImz+X34PLg8vwiLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAizeDx8vDu6ergICbv8Ojt8uXw4C4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJsL79e7kIiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICImz/Dg4urgIiB7CiAgIE1FTlVJVEVNICImyu7v6PDu4uDy/C4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJsfg7OXy6uguLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICImx+Dq6+Dk6uAiIHsKICAgTUVOVUlURU0gIibO7/Dl5OXr6PL8Li4uIiwgTU5JRF9CS01LX0RFRklORQogfQogUE9QVVAgIibN4PHy8O7p6ugiIHsKICAgUE9QVVAJIsLo5Ojs7vHy/CDu6u3gIPHv8ODi6ugiCiAgIEJFR0lOCiAgICAgTUVOVUlURU0gIs/uIPPs7uv34O3o/iIsCU1OSURfT1BUU19IRUxQX0RFRkFVTFQKICAgICBNRU5VSVRFTSAizeDi5fD18yIsCU1OSURfT1BUU19IRUxQX1ZJU0lCTEUKICAgICBNRU5VSVRFTSAizeUg7eDi5fD18yIsCU1OSURfT1BUU19IRUxQX05PTlZJU0lCTEUKICBFTkQKICBNRU5VSVRFTSAiyPHy7vDo/yIsCQlNTklEX09QVFNfSElTVE9SWQogIFBPUFVQICAgICLY8Oj08iIKICBCRUdJTgogICAgTUVOVUlURU0gIszl6+ro6SIsCQlNTklEX09QVFNfRk9OVFNfU01BTEwKICAgIE1FTlVJVEVNICLO4fv37fvpIiwgICAgCU1OSURfT1BUU19GT05UU19OT1JNQUwKICAgIE1FTlVJVEVNICLK8PPv7fvpIiwgICAgIAlNTklEX09QVFNfRk9OVFNfTEFSR0UKICBFTkQKICBNRU5VSVRFTSAiyPHv7uv85+7i4PL8IPHo8fLl7O375SD24uXy4CIsCU1OSURfT1BUU19TWVNURU1fQ09MT1JTCiB9CiBQT1BVUCAiJtHv8ODi6uAiIHsKICAgTUVOVUlURU0gIs/u7O75/CAm7+4g7+7s7vnoIiwgTU5JRF9IRUxQX0hFTFBPTgogICBNRU5VSVRFTSAiwvHl4+TgICbx4uXw9fMiLCBNTklEX0hFTFBfSEVMUFRPUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIibI7fTu8Ozg9uj/Li4uIiwgTU5JRF9IRUxQX0FCT1VUCiNpZmRlZiBXSU5FTElCCiAgIE1FTlVJVEVNICImziBXaW5lIiwgTU5JRF9IRUxQX1dJTkUKI2VuZGlmCiB9Cn0KCklERF9JTkRFWCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjAwLCAxOTAgTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAi0+rg5+Dy5ev8Igp7CiAgICBMSVNUQk9YIElEQ19JTkRFWExJU1QsIDEwLCAxMCwgMTgwLCAxNTAsIExCU19OT0lOVEVHUkFMSEVJR0hUIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCnsKU1RJRF9XSU5FX0hFTFAsIAki0e/w4OLq4CBXSU5FIgpTVElEX1dIRVJST1IsIAkJIs7YyMHKwCIKU1RJRF9XQVJOSU5HLCAgCQkiws3IzMDNyMUiClNUSURfSU5GTywgIAkJIsjt9O7w7OD26P8iClNUSURfTk9UX0lNUExFTUVOVEVELCAJIs3lIPDl4Ovo5+7i4O3t7iIKU1RJRF9ITFBGSUxFX0VSUk9SX3MsIAkizvjo4ergIO/w6CD38uXt6Ogg9ODp6+Ag7+7s7vnoIGAlcyciClNUSURfSU5ERVgsIAkJIibR7uTl8Obg7ejlIgpTVElEX0NPTlRFTlRTLAkJIs3g9+Dr7iIKU1RJRF9CQUNLLCAJCSImzeDn4OQiClNUSURfQUxMX0ZJTEVTLCAJIsLx5SD04Onr+yAoKi4qKSIKU1RJRF9IRUxQX0ZJTEVTX0hMUCwgCSLU4Onr+yDx7/Dg4uroICgqLmhscCkiClNUSURfRklMRV9OT1RfRk9VTkRfcwkizeUg7O7j8yDt4Ony6CAnJXMnLiDC+yD17vLo8uUg7eDp8ugg/fLu8iD04OnrIPHg7O7x8u7/8uXr/O3uPyIKU1RJRF9OT19SSUNIRURJVAkizeUg7O7j8yDt4Ony6CByaWNoZWRpdCIKU1RJRF9QU0hfSU5ERVgsCQki0e7k5fDm4O3o5TogIgp9CgpDT05URVhUX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVApCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkJTUVOVUlURU0gIsfg7OXy6uguLi4iLCAgICAgICBNTklEX0NUWFRfQU5OT1RBVEUKCQlNRU5VSVRFTSAiyu7v6PDu4uDy/CIsICAgICAgICAgICAgICAgIE1OSURfQ1RYVF9DT1BZCgkJTUVOVUlURU0gIs/l9+Dy/C4uLiIsICAgICAgICAgICAgTU5JRF9DVFhUX1BSSU5UCgkJUE9QVVAgICAgItjw6PTyIgoJCUJFR0lOCgkJCU1FTlVJVEVNICLM5evq6OkiLCAgICAgICBNTklEX0NUWFRfRk9OVFNfU01BTEwKCQkJTUVOVUlURU0gIs7h+/ft++kiLCAgICAgIE1OSURfQ1RYVF9GT05UU19OT1JNQUwKCQkJTUVOVUlURU0gIsrw8+/t++kiLCAgICAgICBNTklEX0NUWFRfRk9OVFNfTEFSR0UKCQlFTkQKCQlQT1BVUCAgICLC6OTo7O7x8vwg7urt4CDx7/Dg4uroIgoJCUJFR0lOCgkJCU1FTlVJVEVNICLP7iDz7O7r9+Dt6P4iLCAgICAgTU5JRF9DVFhUX0hFTFBfREVGQVVMVAoJCQlNRU5VSVRFTSAizeDi5fD18yIsICAgICBNTklEX0NUWFRfSEVMUF9WSVNJQkxFCgkJCU1FTlVJVEVNICLN5SDt4OLl8PXzIiwgTU5JRF9DVFhUX0hFTFBfTk9OVklTSUJMRQoJCUVORAoJCU1FTlVJVEVNICLI8e/u6/zn7uLg8vwg8ejx8uXs7fvlIPbi5fLgIiwgICBNTklEX0NUWFRfU1lTVEVNX0NPTE9SUwoJRU5ECkVORAo=