IyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKIyB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwojIHRoYXQgbWF5IGFwcGx5OgojCiMgUG9ydGlvbnMgQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQojIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiMKCiMKIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgojCkFDX0lOSVQoW05ldC1TTk1QXSwgWzUuNi4yXSwgW25ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdKQpBQ19QUkVSRVEoWzIuNjNdKQpBQ19DT05GSUdfU1JDRElSKFthZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmNdKQpBQ19SRVZJU0lPTihbJFJldmlzaW9uJF0pCgpBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCkFDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCkKCkFDX01TR19DQUNIRV9JTklUKCkKCiMKIyBzYXZlIHRoZSBjb25maWd1cmUgYXJndW1lbnRzCiMKQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfQ09ORklHVVJFX09QVElPTlMsIiRhY19jb25maWd1cmVfYXJncyIsCiAgW2NvbmZpZ3VyZSBvcHRpb25zIHNwZWNpZmllZF0pCkNPTkZJR1VSRV9PUFRJT05TPSJcIiRhY19jb25maWd1cmVfYXJnc1wiIgpBQ19TVUJTVChDT05GSUdVUkVfT1BUSU9OUykKCiMjCiMjIFJlY29tbWVuZGVkIHN0cnVjdHVyZToKIyMKIyAgICAgaW5mb3JtYXRpb24gb24gdGhlIHBhY2thZ2UKIyAgICAgY2hlY2tzIGZvciBwcm9ncmFtcwojICAgICBjaGVja3MgZm9yIGxpYnJhcmllcwojICAgICBjaGVja3MgZm9yIGhlYWRlciBmaWxlcwojICAgICBjaGVja3MgZm9yIHR5cGVzCiMgICAgIGNoZWNrcyBmb3Igc3RydWN0dXJlcwojICAgICBjaGVja3MgZm9yIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcwojICAgICBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiMgICAgIGNoZWNrcyBmb3Igc3lzdGVtIHNlcnZpY2VzCgptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZV0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbF0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnNdKQpBQ19DQUNIRV9TQVZFCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXNdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWJdKQpBQ19DQUNIRV9TQVZFCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMV0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50XSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyXSkKQUNfQ0FDSEVfU0FWRQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbl0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMl0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzXSkKQUNfQ0FDSEVfU0FWRQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0XSkKQUNfQ0FDSEVfU0FWRQoKIwojIGRlZmluZSB0aGUgYWdlbnQgbGlicmFyaWVzIHZhcmlhYmxlcwojCkFDX1NVQlNUKExNSUJMSUJTKQpBQ19TVUJTVChBR0VOVExJQlMpCkFDX1NVQlNUKE9USEVSQUdFTlRMSUJPQkpTKQpBQ19TVUJTVChPVEhFUkFHRU5UTElCTE9CSlMpCgpBQ19TVUJTVChETExJQlMpCgpBQ19TVUJTVChQQVJUSUFMVEFSR0VURkxBR1MpCkFDX1NVQlNUKGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSkKCkFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGU6TWFrZWZpbGUudG9wOk1ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKQUNfQ09ORklHX0ZJTEVTKFtzbm1wbGliL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpzbm1wbGliL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOnNubXBsaWIvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthcHBzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9oZWxwZXJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9taWJncm91cC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFtsb2NhbC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bG9jYWwvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQpBQ19DT05GSUdfRklMRVMoW3Rlc3RpbmcvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnRlc3RpbmcvTWFrZWZpbGUuaW5dKQpBQ19DT05GSUdfRklMRVMoW21hbi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWFuL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKQUNfQ09ORklHX0ZJTEVTKFttaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKQUNfQ09ORklHX0ZJTEVTKFtuZXQtc25tcC1jb25maWc6bmV0LXNubXAtY29uZmlnLmluXSwKCQlbY2htb2QgK3ggbmV0LXNubXAtY29uZmlnXSkKQUNfQ09ORklHX0ZJTEVTKFtuZXQtc25tcC1jcmVhdGUtdjMtdXNlcjpuZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbl0sCgkJW2NobW9kICt4IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyXSkKQUNfQ09ORklHX0ZJTEVTKFtkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzOmRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW5dKQoKQUNfQ09ORklHX0NPTU1BTkRTKFtkZWZhdWx0XSwgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1oKQoKIwojIHByb3RlY3QgUEFDS0FHRV8qIHZhcmlhYmxlcwojCkFIX1ZFUkJBVElNKFtQQUNLQUdFX0JVR1JFUE9SVF0sWy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwojaWZuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCiN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAojZW5kaWZdKQpBSF9WRVJCQVRJTShbUEFDS0FHRV9OQU1FXSxbLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwojaWZuZGVmIFBBQ0tBR0VfTkFNRQojdW5kZWYgUEFDS0FHRV9OQU1FCiNlbmRpZl0pCkFIX1ZFUkJBVElNKFtQQUNLQUdFX1NUUklOR10sWy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KI2lmbmRlZiBQQUNLQUdFX1NUUklORwojdW5kZWYgUEFDS0FHRV9TVFJJTkcKI2VuZGlmXSkKQUhfVkVSQkFUSU0oW1BBQ0tBR0VfVEFSTkFNRV0sWy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KI2lmbmRlZiBQQUNLQUdFX1RBUk5BTUUKI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQojZW5kaWZdKQpBSF9WRVJCQVRJTShbUEFDS0FHRV9WRVJTSU9OXSxbLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KI2lmbmRlZiBQQUNLQUdFX1ZFUlNJT04KI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgojZW5kaWZdKQoKQUNfT1VUUFVUCgpBQ19NU0dfQ0FDSEVfRElTUExBWSgpCiMgTG9jYWwgVmFyaWFibGVzOgojIG1vZGU6IEF1dG9jb25mCiMgY29tbWVudC1zdGFydDogIiMiCiMgRW5kOgo=