IwojIE1ha2VmaWxlIGZvciBGcmVlVHlwZTIgbGluayBsaWJyYXJ5IHVzaW5nIEFtaWdhIFNBUy9DIDYuNTgKIwoKCiMgQ29weXJpZ2h0IDIwMDUtMjAxNSBieQojIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCiMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAojIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CiMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKIyBmdWxseS4KCgojIHRvIGJ1aWxkIGZyb20gdGhlIGJ1aWxkcy9hbWlnYSBkaXJlY3RvcnkgY2FsbAojCiMgIHNtYWtlIGFzc2lnbgojICBzbWFrZQojCiMgWW91ciBwcm9ncmFtcyBzb3VyY2UgY29kZSBzaG91bGQgc3RhcnQgd2l0aCB0aGlzCiMgKHVuY29tbWVudCB0aGUgcGFydHMgeW91IGRvIG5vdCBuZWVkIHRvIGtlZXAgdGhlIHByb2dyYW0gc21hbGwpOgojIC0tLTg8LS0tCiNkZWZpbmUgRlRfVVNFX0FVVE9GSVQgLy8gYXV0b2ZpdHRlcgojZGVmaW5lIEZUX1VTRV9SQVNURVIgIC8vIG1vbm9jaHJvbWUgcmFzdGVyaXplcgojZGVmaW5lIEZUX1VTRV9TTU9PVEggIC8vIGFudGktYWxpYXNpbmcgcmFzdGVyaXplcgojZGVmaW5lIEZUX1VTRV9UVCAgICAgIC8vIHRydWV0eXBlIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1QxICAgICAgLy8gdHlwZTEgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDQyICAgICAvLyB0eXBlNDIgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDFDSUQgICAvLyBjaWQta2V5ZWQgdHlwZTEgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfQ0ZGICAgICAvLyBvcGVudHlwZSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9CREYgICAgIC8vIGJkZiBiaXRtYXAgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfUENGICAgICAvLyBwY2YgYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1BGUiAgICAgLy8gcGZyIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1dJTkZOVCAgLy8gd2luZG93cyAuZm50fC5mb24gYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX09UViAgICAgLy8gb3BlbnR5cGUgdmFsaWRhdG9yCiNkZWZpbmUgRlRfVVNFX0dYViAgICAgLy8gdHJ1ZXR5cGUgZ3ggdmFsaWRhdG9yCiNpbmNsdWRlICJGVDpzcmMvYmFzZS9mdGluaXQuYyIKIyAtLS04PC0tLQojCiMgbGluayB5b3VyIHByb2dyYW1zIHdpdGggZnQyXzY4MHgwLmxpYiBhbmQgZWl0aGVyIGZ0c3lzdGVtLm8gb3IgZnRzeXN0ZW1wdXJlLm8KIyAoYW5kIGVpdGhlciBmdGRlYnVnLm8gb3IgZnRkZWJ1Z3B1cmUubyBpZiB5b3UgZW5hYmxlZCBGVF9ERUJVR19MRVZFTF9FUlJPUiBvcgojIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGluIGluY2x1ZGUvY29uZmlnL2Z0b3B0aW9uLmgpLgoKT0JKQkFTRSA9IGZ0YmFzZS5vIGZ0YmJveC5vIGZ0YmRmLm8gZnRiaXRtYXAubyBmdGNpZC5vIGZ0Zm50Zm10Lm8gZnRmc3R5cGUubyBcCgkgIGZ0Z2FzcC5vIGZ0Z2x5cGgubyBmdGd4dmFsLm8gZnRsY2RmaWwubyBmdG1tLm8gZnRvdHZhbC5vICAgICAgICAgICBcCgkgIGZ0cGF0ZW50Lm8gZnRwZnIubyBmdHN0cm9rZS5vIGZ0c3ludGgubyBmdHR5cGUxLm8gZnR3aW5mbnQubwoKT0JKU1lTVEVNID0gZnRzeXN0ZW0ubyBmdHN5c3RlbXB1cmUubwoKT0JKREVCVUcgPSBmdGRlYnVnLm8gZnRkZWJ1Z3B1cmUubwoKT0JKQUZJVCA9IGF1dG9maXQubwoKT0JKR1hWID0gZ3h2YWxpZC5vCgpPQkpPVFYgPSBvdHZhbGlkLm8KCk9CSlBTID0gcHNhdXgubyBwc25hbWVzLm8gcHNoaW50ZXIubwoKT0JKUkFTVEVSID0gcmFzdGVyLm8gc21vb3RoLm8KCk9CSlNGTlQgPSBzZm50Lm8KCk9CSkNBQ0hFID0gZnRjYWNoZS5vCgpPQkpGT05URCA9IGNmZi5vIHR5cGUxLm8gdHlwZTQyLm8gdHlwZTFjaWQub1wKCSAgIHRydWV0eXBlLm8gd2luZm50Lm8gYmRmLm8gcGNmLm8gcGZyLm8KCkNPUkUgPSBGVDpzcmMvCgpDUFUgICAgICAgPSA2ODAwMAojQ1BVICAgICAgPSA2ODAyMAojQ1BVICAgICAgPSA2ODAzMAojQ1BVICAgICAgPSA2ODA0MAojQ1BVICAgICAgPSA2ODA2MAoKT1BUSU1JWkVSID0gb3B0aW5sb2NhbAoKU0NGTEFHUyA9IG9wdGltaXplIG9wdHRpbWUgb3B0c2NoZWQgc3RybWVyZ2UgZGF0YT1mYXJvbmx5IGlkbGVuPTUwIGNwdT0kKENQVSlcCgkgIGlkaXI9aW5jbHVkZS8gaWRpcj0kKENPUkUpIGlkaXI9RlQ6aW5jbHVkZS8gbm9zdGFja2NoZWNrIG5vY2hrYWJvcnRcCgkgIG5vaWNvbnMgaWdub3JlPTc5LDg1LDExMCwzMDYgcGFyYW1ldGVycz1ib3RoIGRlZmluZT1GVDJfQlVJTERfTElCUkFSWQoKTElCICA9IGZ0Ml8kKENQVSkubGliCgojIHNhbXBsZSBsaW5rZXIgb3B0aW9ucwpPUFRTID0gbGluayBsaWI9JChMSUIpLGxpYjpzYy5saWIsbGliOmFtaWdhLmxpYixsaWI6ZGVidWcubGliXAogICAgICAgc21hbGxjb2RlIHNtYWxsZGF0YSBub2ljb25zIHV0aWxsaWIKCiMgc2FtcGxlIHByb2dyYW0gZW50cnkKI215cHJvZzogbXlwcm9nLmMgZnRzeXN0ZW0ubyAkKExJQikKIwlzYyAkPCBwcm9ncmFtbmFtZT0kQCBmdHN5c3RlbS5vICQoU0NGTEFHUykgJChPUFRTKQoKYWxsOgkkKExJQikgJChPQkpTWVNURU0pICQoT0JKREVCVUcpCgphc3NpZ246Cglhc3NpZ24gRlQ6IC8vCgojIHVzZXMgc2VwYXJhdGUgb2JqZWN0IG1vZHVsZXMgaW4gbGliIHRvIG1ha2UgZm9yIGVhc2llciBkZWJ1Z2dpbmcKIyBhbHNvLCBjYW4gbWFrZSBzbWFsbGVyIHByb2dyYW1zIGlmIGVudGlyZSBlbmdpbmUgaXMgbm90IHVzZWQKZnQyXyQoQ1BVKS5saWI6ICAkKE9CSkJBU0UpICQoT0JKQUZJVCkgJChPQkpPVFYpICQoT0JKUFMpICQoT0JKUkFTVEVSKSAkKE9CSlNGTlQpICQoT0JKQ0FDSEUpICQoT0JKRk9OVEQpIGx6dy5vIGd6aXAubyBiemlwMi5vCglvbWwgJEAgciAkKE9CSkJBU0UpICQoT0JKQUZJVCkgJChPQkpPVFYpICQoT0JKUFMpICQoT0JKUkFTVEVSKSAkKE9CSlNGTlQpICQoT0JKQ0FDSEUpICQoT0JKRk9OVEQpIGx6dy5vIGd6aXAubyBiemlwMi5vCgpjbGVhbjoKCS1kZWxldGUgXCM/Lm8KCnJlYWxjbGVhbjogY2xlYW4KCS1kZWxldGUgZnQyJChDUFUpLmxpYgoKIwojIGZyZWV0eXBlIGxpYnJhcnkgYmFzZQojCmZ0YmFzZS5vOiAkKENPUkUpYmFzZS9mdGJhc2UuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0aW5pdC5vOiAkKENPUkUpYmFzZS9mdGluaXQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0c3lzdGVtLm86ICQoQ09SRSliYXNlL2Z0c3lzdGVtLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHN5c3RlbXB1cmUubzogc3JjL2Jhc2UvZnRzeXN0ZW0uYwkjIyBwdXJlIHZlcnNpb24gZm9yIHVzZSBpbiBydW4tdGltZSBsaWJyYXJ5IGV0YwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0ZGVidWcubzogJChDT1JFKWJhc2UvZnRkZWJ1Zy5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRkZWJ1Z3B1cmUubzogc3JjL2Jhc2UvZnRkZWJ1Zy5jCSMjIHB1cmUgdmVyc2lvbiBmb3IgdXNlIGluIHJ1bi10aW1lIGxpYnJhcnkgZXRjCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKIwojIGZyZWV0eXBlIGxpYnJhcnkgYmFzZSBleHRlbnNpb25zCiMKZnRiYm94Lm86ICQoQ09SRSliYXNlL2Z0YmJveC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRiZGYubzogJChDT1JFKWJhc2UvZnRiZGYuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0Yml0bWFwLm86ICQoQ09SRSliYXNlL2Z0Yml0bWFwLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGNpZC5vOiAkKENPUkUpYmFzZS9mdGNpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRmbnRmbXQubzogJChDT1JFKWJhc2UvZnRmbnRmbXQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0ZnN0eXBlLm86ICQoQ09SRSliYXNlL2Z0ZnN0eXBlLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGdhc3AubzogJChDT1JFKWJhc2UvZnRnYXNwLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGdseXBoLm86ICQoQ09SRSliYXNlL2Z0Z2x5cGguYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0Z3h2YWwubzogJChDT1JFKWJhc2UvZnRneHZhbC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRsY2RmaWwubzogJChDT1JFKWJhc2UvZnRsY2RmaWwuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0bW0ubzogJChDT1JFKWJhc2UvZnRtbS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRvdHZhbC5vOiAkKENPUkUpYmFzZS9mdG90dmFsLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHBhdGVudC5vOiAkKENPUkUpYmFzZS9mdHBhdGVudC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRwZnIubzogJChDT1JFKWJhc2UvZnRwZnIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0c3Ryb2tlLm86ICQoQ09SRSliYXNlL2Z0c3Ryb2tlLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHN5bnRoLm86ICQoQ09SRSliYXNlL2Z0c3ludGguYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0dHlwZTEubzogJChDT1JFKWJhc2UvZnR0eXBlMS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnR3aW5mbnQubzogJChDT1JFKWJhc2UvZnR3aW5mbnQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBhdXRvZml0dGVyIG1vZHVsZQojCmF1dG9maXQubzogJChDT1JFKWF1dG9maXQvYXV0b2ZpdC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFBTIGhpbnRpbmcgbW9kdWxlCiMKcHNoaW50ZXIubzogJChDT1JFKXBzaGludGVyL3BzaGludGVyLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAojCiMgZnJlZXR5cGUgbGlicmFyeSBQUyBzdXBwb3J0IG1vZHVsZQojCnBzYXV4Lm86ICQoQ09SRSlwc2F1eC9wc2F1eC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFBTIGdseXBoIG5hbWVzIG1vZHVsZQojCnBzbmFtZXMubzogJChDT1JFKXBzbmFtZXMvcHNuYW1lcy5jCglzYyAkKFNDRkxBR1MpIGNvZGU9ZmFyIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IG1vbm9jaHJvbWUgcmFzdGVyIG1vZHVsZQojCnJhc3Rlci5vOiAkKENPUkUpcmFzdGVyL3Jhc3Rlci5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IGFudGktYWxpYXNpbmcgcmFzdGVyIG1vZHVsZQojCnNtb290aC5vOiAkKENPUkUpc21vb3RoL3Ntb290aC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5ICdzZm50JyBtb2R1bGUKIwpzZm50Lm86ICQoQ09SRSlzZm50L3NmbnQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBnbHlwaCBhbmQgaW1hZ2UgY2FjaGluZyBzeXN0ZW0gKHN0aWxsIGV4cGVyaW1lbnRhbCkKIwpmdGNhY2hlLm86ICQoQ09SRSljYWNoZS9mdGNhY2hlLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgT3BlblR5cGUgZm9udCBkcml2ZXIKIwpjZmYubzogJChDT1JFKWNmZi9jZmYuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBUcnVlVHlwZSBmb250IGRyaXZlcgojCnRydWV0eXBlLm86ICQoQ09SRSl0cnVldHlwZS90cnVldHlwZS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFR5cGUxIGZvbnQgZHJpdmVyCiMKdHlwZTEubzogJChDT1JFKXR5cGUxL3R5cGUxLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IFR5cGU0MiBmb250IGRyaXZlcgojCnR5cGU0Mi5vOiAkKENPUkUpdHlwZTQyL3R5cGU0Mi5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IENJRC1rZXllZCBUeXBlMSBmb250IGRyaXZlcgojCnR5cGUxY2lkLm86ICQoQ09SRSljaWQvdHlwZTFjaWQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CiMKIyBmcmVldHlwZSBsaWJyYXJ5IENJRC1rZXllZCBUeXBlMSBmb250IGRyaXZlciBleHRlbnNpb25zCiMKI2NpZGFmbS5vOiAkKENPUkUpY2lkL2NpZGFmbS5jCiMJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBCREYgYml0bWFwIGZvbnQgZHJpdmVyCiMKYmRmLm86ICQoQ09SRSliZGYvYmRmLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgUENGIGJpdG1hcCBmb250IGRyaXZlcgojCnBjZi5vOiAkKENPUkUpcGNmL3BjZi5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IGd6aXAgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBQQ0YgYml0bWFwIGZvbnRzCiMKZ3ppcC5vOiAkKENPUkUpZ3ppcC9mdGd6aXAuYwoJc2MgJChTQ0ZMQUdTKSBkZWZpbmUgRkFSIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IGJ6aXAyIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgUENGIGJpdG1hcCBmb250cwojCmJ6aXAyLm86ICQoQ09SRSliemlwMi9mdGJ6aXAyLmMKCXNjICQoU0NGTEFHUykgZGVmaW5lIEZBUiBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBjb21wcmVzcyBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKIwpsencubzogJChDT1JFKWx6dy9mdGx6dy5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFBGUiBmb250IGRyaXZlcgojCnBmci5vOiAkKENPUkUpcGZyL3Bmci5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFdpbmRvd3MgRk5UL0ZPTiBiaXRtYXAgZm9udCBkcml2ZXIKIwp3aW5mbnQubzogJChDT1JFKXdpbmZvbnRzL3dpbmZudC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFRydWVUeXBlR1ggdmFsaWRhdG9yCiMKZ3h2YWxpZC5vOiAkKENPUkUpZ3h2YWxpZC9neHZhbGlkLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgT3BlblR5cGUgdmFsaWRhdG9yCiMKb3R2YWxpZC5vOiAkKENPUkUpb3R2YWxpZC9vdHZhbGlkLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKI0xvY2FsIFZhcmlhYmxlczoKI2NvZGluZzogbGF0aW4tMQojRW5kOgo=