LyoKICogQ29weXJpZ2h0IDIwMDMgVWxyaWNoIEN6ZWthbGxhIGZvciBDb2RlV2VhdmVycwogKiBDb3B5cmlnaHQgMjAwNSwyMDA3LDIwMTAgWXVuU29uZyBId2FuZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2UuaCIKCkxBTkdVQUdFIExBTkdfS09SRUFOLCBTVUJMQU5HX0RFRkFVTFQKClVJSU5TRVJUT0JKRUNUIERJQUxPRyAgMCwgMCwgMjk0LCAxNTEKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAisLTDvCC78MDUIgpGT05UIDksICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMSVNUQk9YICAgICAgICAgSURDX09CSlRZUEVMSVNULDgyLDE5LDEzMSw2NixMQlNfU09SVCB8CiAgICAgICAgICAgICAgICAgICAgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBXU19WSVNJQkxFIHwgV1NfVlNDUk9MTCB8CiAgICAgICAgICAgICAgICAgICAgV1NfVEFCU1RPUAogICAgTFRFWFQgICAgICAgICAgICKwtMO8IMW4wNQ6IixJRENfT0JKVFlQRUxCTCw4Miw3LDUzLDgsV1NfVklTSUJMRQogICAgREVGUFVTSEJVVFRPTiAgICLIrsDOIixJRE9LLDIyMSw3LDY2LDE0CiAgICBQVVNIQlVUVE9OICAgICAgIsPrvNIiLElEQ0FOQ0VMLDIyMSwyNCw2NiwxNAogICAgR1JPVVBCT1ggICAgICAgICKw4bD6IixJRENfUkVTVUxULDcsMTAzLDIwOCw0MQogICAgQ09OVFJPTCAgICAgICAgICK79bfOILi4temx4iIsSURDX0NSRUFURU5FVywiQnV0dG9uIixCU19BVVRPUkFESU9CVVRUT04gfCAKICAgICAgICAgICAgICAgICAgICBXU19HUk9VUCw3LDIwLDYyLDEwCiAgICBDT05UUk9MICAgICAgICAgIsTBxq630SC4uLXpseIiLElEQ19DUkVBVEVDT05UUk9MLCJCdXR0b24iLAogICAgICAgICAgICAgICAgICAgIEJTX0FVVE9SQURJT0JVVFRPTiB8IE5PVCBXU19WSVNJQkxFLDcsNTQsNjIsMTAKICAgIENPTlRST0wgICAgICAgICAixsTAz7fOus7FzSC4uLXpseIiLElEQ19DUkVBVEVGUk9NRklMRSwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPUkFESU9CVVRUT04sNywzNyw2NywxMAogICAgTFRFWFQgICAgICAgICAgICIiLElEQ19SRVNVTFRERVNDLDQ5LDExMiwxNTksMjMKICAgIFBVU0hCVVRUT04gICAgICAixMHGrrfRIMPfsKEoJkEpLi4uIixJRENfQUREQ09OVFJPTCw4MSw4OCw2MywxNCxOT1QgV1NfVklTSUJMRQogICAgQ09OVFJPTCAgICAgICAgICK+xsDMxNzAuLfOILq4seIiLElEQ19BU0lDT04sIkJ1dHRvbiIsQlNfQVVUT0NIRUNLQk9YIHwgCiAgICAgICAgICAgICAgICAgICAgV1NfVEFCU1RPUCB8IE5PVCBXU19WSVNJQkxFLDIyMyw1OCw2NCwxMAogICAgUFVTSEJVVFRPTiAgICAgICLDo7HiLi4uIixJRENfQlJPV1NFLDE1NSw4OCw1MCwxNCxOT1QgV1NfVklTSUJMRQogICAgTFRFWFQgICAgICAgICAgICLGxMDPOiIsSURDX0ZJTEVMQkwsNTgsMjEsMjAsOCwgTk9UIFdTX1ZJU0lCTEUKICAgIEVESVRURVhUICAgICAgICBJRENfRklMRSw4MywzNywxMzIsMTMsRVNfQVVUT0hTQ1JPTEwgfCBOT1QgV1NfVklTSUJMRQpFTkQKClNUUklOR1RBQkxFCnsKICBJRFNfUkVTVUxUT0JKREVTQwkiu/UgICVzILC0w7y4piC5rrytv6Egu/DA1CIKICBJRFNfUkVTVUxURklMRU9CSkRFU0MJIsDbvLrH0SDHrrHXuLLAuyC757/rx8+/qSDIsLy6yK29w8WzvPYgwNa0wiCwtMO8uKYgua68rcbEwM8gs7u/68C4t84gu/DA1MfPvcO/wC4iCiAgSURTX0JST1dTRSAgICAgICAgICAgICLDo7HiIgogIElEU19OT1RPTEVNT0QgICAgICAgICAiwMwgxsTAz8C6IL/Dudm4pSBPTEW48LXiwMwgvsa00bDFt84gurjA1LTPtNkuIE9MRcTBxq630cC7ILXut8/H0rz2IL74vcC0z7TZLiIKICBJRFNfTk9UT0xFTU9EQ0FQVElPTiAgIsTBxq630SC09cfPseIiCn0KCklERF9QQVNURVNQRUNJQUw0IERJQUxPRyAzLCAxNSwgMjk5LCAxNDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIsavurDHz7DUICC62b+ps9ax4iIKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAiv/i6uzoiLCAtMSwgNiwgOSwgMzAsIDgsIFdTX1ZJU0lCTEUgfCBXU19HUk9VUAogICAgQ09OVFJPTCAgICAgICAiutm/qbPWseIoJlApIiwgSURDX1BTX1BBU1RFLCAiQnV0dG9uIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVklTSUJMRSwKICAgICAgICAgICAgICAgICAgMSwgNDQsIDU1LCAxMAogICAgQ09OVFJPTCAgICAgICAiuLXFqbfOILrZv6mz1rHiKCZMKSIsIElEQ19QU19QQVNURUxJTkssICJCdXR0b24iLCBCU19BVVRPUkFESU9CVVRUT04gfCBXU19WSVNJQkxFLAogICAgICAgICAgICAgICAgICAxLCA2MSwgNjksIDEwCiAgICBMVEVYVCAgICAgICAgICK02bilIMDMuKfAuLfOKCZBKToiLCAtMSwgNzMsIDI1LCA1OSwgOCwgV1NfVklTSUJMRSB8IFdTX0dST1VQCiAgICBMSVNUQk9YICAgICAgIElEQ19QU19QQVNURUxJU1QsICAgICA3MywgMzYsIDE1MCwgNTcsIExCU19OT1RJRlkgfCBMQlNfVVNFVEFCU1RPUFMgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSIHwgTk9UIFdTX1ZJU0lCTEUKICAgIExJU1RCT1ggICAgICAgSURDX1BTX1BBU1RFTElOS0xJU1QsIDczLCAzNiwgMTUwLCA1NywgTEJTX05PVElGWSB8IExCU19VU0VUQUJTVE9QUyB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIgfCBOT1QgV1NfVklTSUJMRQogICAgTElTVEJPWCAgICAgICBJRENfUFNfRElTUExBWUxJU1QsICAgNzMsIDM2LCAxNTAsIDU3LCBMQlNfTk9USUZZIHwgTEJTX1VTRVRBQlNUT1BTIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZJU0lCTEUKICAgIENPTlRST0wgICAgICAgIsiuwM4iLCBJRE9LLCAiQnV0dG9uIiwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZJU0lCTEUsIDIyNiwgNiwgNjYsIDE0CiAgICBDT05UUk9MICAgICAgICLD67zSIiwgSURDQU5DRUwsICJCdXR0b24iLCBCU19QVVNIQlVUVE9OIHwgV1NfVEFCU1RPUCB8IFdTX1ZJU0lCTEUsIDIyNiwgMjMsIDY2LCAxNAogICAgQ09OVFJPTCAgICAgICAitbW/8ri7KCZIKSIsIElEQ19PTEVVSUhFTFAsICJCdXR0b24iLCBCU19QVVNIQlVUVE9OIHwgV1NfVEFCU1RPUCB8IFdTX1ZJU0lCTEUsIDIyNiwgNDIsIDY2LCAxNAogICAgQ09OVFJPTCAgICAgICAivsbAzMTcwLi3ziC6uLHiKCZEKSIsIElEQ19QU19ESVNQTEFZQVNJQ09OLCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCB8IFdTX1ZJU0lCTEUsIDIyNiwgNTksIDcwLCAxNAogICAgQ09OVFJPTCAgICAgICAiIiwgSURDX1BTX0lDT05ESVNQTEFZLCAiU3RhdGljIiwgU1NfSUNPTiB8IFdTX1ZJU0lCTEUsIDIyNCwgNzUsIDY2LCA0NAogICAgQ09OVFJPTCAgICAgICAivsbAzMTcILnZstmx4igmSSkuLi4iLCBJRENfUFNfQ0hBTkdFSUNPTiwgIkJ1dHRvbiIsIEJTX1BVU0hCVVRUT04gfCBXU19UQUJTVE9QIHwgV1NfVklTSUJMRSwgMjI0LCAxMjMsIDY2LCAxNAogICAgQ09OVFJPTCAgICAgICAiIiwgSURDX1BTX1JFU1VMVElNQUdFLCAiU3RhdGljIiwgU1NfSUNPTiB8IFdTX1ZJU0lCTEUsIDgsIDEwMSwgNDIsIDM0CiAgICBDT05UUk9MICAgICAgICI8PCCw4bD6IMXYvbrGrrTCIL+pseK02bChID4+IiwgSURDX1BTX1JFU1VMVFRFWFQsICJTdGF0aWMiLCBTU19OT1BSRUZJWCB8IFdTX1ZJU0lCTEUsIDU0LCAxMDAsIDE1OSwgMzUKICAgIENPTlRST0wgICAgICAgIrDhsPoiLCAtMSwgIkJ1dHRvbiIsIEJTX0dST1VQQk9YIHwgV1NfR1JPVVAgfCBXU19WSVNJQkxFLCA2LCA5MCwgMjEyLCA0OAogICAgQ09OVFJPTCAgICAgICAiIiwgSURDX1BTX1NPVVJDRVRFWFQsICJFZGl0IiwgRVNfUkVBRE9OTFkgfCBFU19BVVRPSFNDUk9MTCB8IFdTX1ZJU0lCTEUsIDM3LCA5LCAxODAsIDgKRU5ECgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfUFNfUEFTVEVfREFUQSAgICAgICAgICAgICAgICAgICAgICK0573FwMcgua68rSAlc7+hIMWsuLO6uLXlwMcgs7u/6yC78MDUx8+x4i4iCiAgICBJRFNfUFNfUEFTVEVfT0JKRUNUICAgICAgICAgICAgICAgICAgICK0573FwMcgua68rb+hIMWsuLO6uLXlwMcgs7u/67XpwLsgw7e6zsfPuOkgICVzuKYgu+e/68fYvK0gwMywzcC7IL3Hx+DH0iC89iDA1r3AtM+02S4iCiAgICBJRFNfUFNfUEFTVEVfT0JKRUNUX0FTX0lDT04gICAgICAgICAgICK0573FwMcgua68rb+hIMWsuLO6uLXlwMcgs7u/67XpwLsgw7e6zsfPuOkgICVzuKYgu+e/68fYvK0gwMywzcC7IL3Hx+DH0iC89iDA1r3AtM+02S4gwMywzcC6IL7GwMzE3MC4t84gs6rFuLO7wfogsMy0z7TZLiIKICAgIElEU19QU19QQVNURV9MSU5LX0RBVEEgICAgICAgICAgICAgICAgIrTnvcXAxyC5rrytICVzv6Egxay4s7q4teXAxyCzu7/rILvwwNTHz7HiLiAgwMwgtaXAzMXNtMIgv/i6uyDGxMDPv6Egv6yw4bXHvu4gwNa+7rytIMbEwM/AzCC52bLuuOkgtOe9xcDHILmuvK21tSC52bLwsMy0z7TZLiIKICAgIElEU19QU19QQVNURV9MSU5LX09CSkVDVCAgICAgICAgICAgICAgIrTnvcXAxyC5rrytv6Egxay4s7q4teW/oSDA1rTCILHXuLLAuyDB/b7us9a9wLTPtNkuICDAzCCx17iywLogv/i6uyDGxMDPv6Egv6yw4bXHvu4gwNa+7rytIMbEwM/AzCC52bLuuOkgtOe9xcDHILmuvK21tSC52bLwsMy0z7TZLiIKICAgIElEU19QU19QQVNURV9MSU5LX09CSkVDVF9BU19JQ09OICAgICAgIrTnvcXAxyC5rrytv6Egxay4s7q4teW/oSDA1rTCILTcw+C+xsDMxNzAuyDB/b7us9a9wLTPtNkuICDAzCC03MPgvsbAzMTcwLogv/i6uyDGxMDPv6Egv6yw4bXHvu4gwNa+7rytIMbEwM/AzCC52bLuuOkgtOe9xcDHILmuvK21tSC52bLwsMy0z7TZdC4iCiAgICBJRFNfUFNfTk9OX09MRSAgICAgICAgICAgICAgICAgICAgICAgICK0573FwMcgua68rb+hIMWsuLO6uLXlwMcgs7u/6yC78MDUx8+x4i4iCiAgICBJRFNfUFNfVU5LTk9XTl9UWVBFICAgICAgICAgICAgICAgICAgICK+y7z2IL74tMIgx/y9xCIKICAgIElEU19QU19VTktOT1dOX1NSQyAgICAgICAgICAgICAgICAgICAgIr7LvPYgvvi0wiC/+Lq7IgogICAgSURTX1BTX1VOS05PV05fQVBQICAgICAgICAgICAgICAgICAgICAis7uwoSC4uLXnIMfBt86x17elIgp9Cg==