LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTcgSGVucmlrIE9sc2VuCiAqIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKiBDb3B5cmlnaHQgMjAwOCBKZW5zIEFsYnJldHNlbjxqZW5zQGFsYnJldHNlbi5kaz4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIndpbmhlbHBfcmVzLmgiCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImRmlsZXIiIHsKICBNRU5VSVRFTSAixSZiZW4uLi4iLCBNTklEX0ZJTEVfT1BFTgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImVWRza3JpdiBlbW5lIiwgTU5JRF9GSUxFX1BSSU5UCiAgTUVOVUlURU0gIiZJbmRzdGlsIHByaW50ZXIiLCBNTklEX0ZJTEVfU0VUVVAKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBZnNsdXQiLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIiZSZWRpZ2VyIiB7CiAgIE1FTlVJVEVNICJLJm9waWVyLi4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImQW5t5nJrLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiQm9nJm3mcmtlIiB7CiAgIE1FTlVJVEVNICImRGVmaW5lci4uLiIsIE1OSURfQktNS19ERUZJTkUKIH0KIFBPUFVQICImT3B0aW9ucyIgewogICBQT1BVUAkiSGVscCBhbHdheXMgdmlzaWJsZSIKICAgQkVHSU4KICAgICBNRU5VSVRFTSAiRGVmYXVsdCIsCU1OSURfT1BUU19IRUxQX0RFRkFVTFQKICAgICBNRU5VSVRFTSAiVmlzaWJsZSIsCU1OSURfT1BUU19IRUxQX1ZJU0lCTEUKICAgICBNRU5VSVRFTSAiTm9uIHZpc2libGUiLAlNTklEX09QVFNfSEVMUF9OT05WSVNJQkxFCiAgRU5ECiAgTUVOVUlURU0gIkhpc3RvcnkiLAkJTU5JRF9PUFRTX0hJU1RPUlkKICBQT1BVUCAgICAiRm9udHMiCiAgQkVHSU4KICAgIE1FTlVJVEVNICJTbWFsbCIsCQlNTklEX09QVFNfRk9OVFNfU01BTEwKICAgIE1FTlVJVEVNICJOb3JtYWwiLCAgICAJTU5JRF9PUFRTX0ZPTlRTX05PUk1BTAogICAgTUVOVUlURU0gIkxhcmdlIiwgICAgIAlNTklEX09QVFNfRk9OVFNfTEFSR0UKICBFTkQKICBNRU5VSVRFTSAiVXNlIHN5c3RlbSBjb2xvcnMiLAlNTklEX09QVFNfU1lTVEVNX0NPTE9SUwogfQogUE9QVVAgIiZIauZscCIgewogICBNRU5VSVRFTSAiJkJydWcgYWYgSGrmbHAiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICJBbHRpZCAm+HZlcnN0IiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImSW5mb3JtYXRpb24uLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIk9tICZXSU5FIiwgTU5JRF9IRUxQX1dJTkUKI2VuZGlmCiB9Cn0KCklERF9JTkRFWCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjAwLCAxOTAgTEFOR1VBR0UgTEFOR19EQU5JU0gsIFNVQkxBTkdfREVGQVVMVApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJJbmRleCIKewogICAgTElTVEJPWCBJRENfSU5ERVhMSVNULCAxMCwgMTAsIDE4MCwgMTUwLCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKfQoKLyogU3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ERUZBVUxUCnsKU1RJRF9XSU5FX0hFTFAsIAkiV0lORSBIauZscCIKU1RJRF9XSEVSUk9SLCAJCSJGRUpMIgpTVElEX1dBUk5JTkcsICAJCSJBRFZBUlNFTCIKU1RJRF9JTkZPLCAgCQkiSW5mb3JtYXRpb24iClNUSURfTk9UX0lNUExFTUVOVEVELCAJIklra2UgaW1wbGVtZW50ZXJldCIKU1RJRF9ITFBGSUxFX0VSUk9SX3MsIAkiRmVqbCB2ZWQgaW5kbOZzbmluZyBhZiBmaWxlbiBgJXMnIgpTVElEX0lOREVYLCAJCSImSW5kaG9sZCIKU1RJRF9DT05URU5UUywJCSJTdW1tYXJ5IgpTVElEX0JBQ0ssIAkJIiZUaWxiYWdlIgpTVElEX0FMTF9GSUxFUywgCSJBbGxlIGZpbGVyICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIkhq5mxwZSBmaWxlciAoKi5obHApIgpTVElEX0ZJTEVfTk9UX0ZPVU5EX3MJIkthbiBpa2tlIGZpbmRlICclcycuIFZpbCBkdSBzZWx2IGZpbmRlIGZpbGVuPyIKU1RJRF9OT19SSUNIRURJVAkiS2FuIGlra2UgZmluZGUgZW4gJ3JpY2hlZGl0JyBpbXBsZW1lbnRlcmluZy4uLiBBZmJyeWRlciIKU1RJRF9QU0hfSU5ERVgsCQkiSGVscCB0b3BpY3M6ICIKfQo=