LyoKICogIE5vdGVwYWQgKFRoYWkgUmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDMgSm9uIEdyaWZmaXRocwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1RIQUksIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIuG/6cEiIHsKICBNRU5VSVRFTSAiysPp0qfjy8HoXHRDdHJsK04iLCAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICLgu9S0Li4uXHRDdHJsK08iLCAgIENNRF9PUEVOCiAgTUVOVUlURU0gIrrRubfXoVx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIrrRubfXoeC757kuLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICK+1MG+7Fx0Q3RybCtQIiwgICAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiu8PRuuG16KfLuenSLi4uIiwgICAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiu8PRuuG16KfgpMPX6M2nvtTBvuwuLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLNzaEiLCAgICAgICAgICAgICBDTURfRVhJVAogfQogUE9QVVAgIuGh6eSiIiB7CiAgTUVOVUlURU0gIuDD1cKhpNe5XHRDdHJsK1oiLCAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAitdG0XHRDdHJsK1giLCAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAitdG0xc2hXHRDdHJsK0MiLCAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAix9KnXHRDdHJsK1YiLCAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAixbpcdERlbCIsICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLgxdfNobfR6afLwbRcdEN0cmwrQSIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIsfRubfV6C9cdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLL6M26w8O30bTC0sciLCAgQ01EX1dSQVAKICBNRU5VSVRFTSAiw9m74bq6tNHHzdGhycMuLi4iLCAgICAgICAgICBDTURfRk9OVAogfQogUE9QVVAgIqTRucvSIiB7CiAgTUVOVUlURU0gIqTpucvSXHRDdHJsK0YiLCAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAipOm5y9K16M3ku1x0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiB9CiBQT1BVUCAiqujHwuDLxdXNIiB7CiAgTUVOVUlURU0gIuC51+nNy9IiLCAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIqTpucvSLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICLgodXowseh0bqq6MfC4MvF1c0iLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICLD0sLF0ODN1cK0IiB7CiAgIE1FTlVJVEVNICLjus252K3StS4uLiIsIENNRF9MSUNFTlNFCiAgIE1FTlVJVEVNICLkwejB1SBXQVJSQU5UWS4uLiIsIENNRF9OT19XQVJSQU5UWQogICBNRU5VSVRFTSAi4KHV6MLHodG6IFdpbmUuLi4gIiwgQ01EX0FCT1VUX1dJTkUKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiu8PRuuG16KfLuenSIgp7CkxURVhUICAgICLL0cc6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkZvb3RlcjoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAios26ocPQtNLJOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAio+nSwjoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiurk6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIqLH0joiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAixejSpzoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCovIDB4MTUwLCAgICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAitaHFpyIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIsKh4MXUoSIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiqujHwuDLxdXNIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAiy7np0iAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAiMjAgwcEuIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIjIwIMHBLiIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICIyNSDBwS4iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAiMjUgwcEuIiAgICAgLyogRklYTUUgKi8KClNUUklOR19OT1RFUEFELCAgICAgICAiTm90ZXBhZCIKU1RSSU5HX0VSUk9SLCAgICAgICAgICKkx9LBu9S0IgpTVFJJTkdfV0FSTklORywgICAgICAgIqTt0rXXzbkiClNUUklOR19JTkZPLCAgICAgICAgICAiw9LCxdDgzdXCtCIKClNUUklOR19VTlRJVExFRCwgICAgICAi5MHooe3Sy7m0qtbozSIKClNUUklOR19BTExfRklMRVMsICAgICAgICK32KHhv+nBICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAi4b/pwbXt0sPSICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAi4b/pwSAnJXMnIOPLrejgodS55LsiClNUUklOR19OT1RFWFQsICAgICKk2LPkwejjtOCi1cK5zdDkw1xuocPYs9LFzafjy8HoIgpTVFJJTkdfRE9FU05PVEVYSVNULCAi5MHovrrhv+nBICclcycgt9XotenNp6HSw+C71LRcbqTYs7Xpzaeh0sPKw+nSp+PLwejkweggPyIKU1RSSU5HX05PVFNBVkVELCAgIsHVodLD4LvF1ejCueG7xaeh0brgzaHK0sNcblxuJyVzJ1xuXG6k2LO16c2nodLDutG5t9ahwdG5y8PXzeTB6CA/IgpTVFJJTkdfTk9URk9VTkQsICAi5MHovrqi6c2kx9LBICclcycgt9XotenNp6HSw6TpucvSIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgIqTH0sGo7dLLwbRcbqHD2LPSxc2n48vB6CIKCn0K