LyoKICogIE5vdGVwYWQgKEdlcm1hbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19HRVJNQU4sIFNVQkxBTkdfTkVVVFJBTAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZEYXRlaSIgewogIE1FTlVJVEVNICImTmV1XHRTdHJnK04iLCAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICLWJmZmbmVuLi4uXHRTdHJnK08iLCAgICAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJlNwZWljaGVyblx0U3RyZytTIiwgICAgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIlNwZWljaGVybiAmdW50ZXIuLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImRHJ1Y2tlbi4uLlx0U3RyZytQIiwgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlNlaXRlIGVpbiZyaWNodGVuLi4uIiwgICAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJEcnVja2VyJmVpbnJpY2h0dW5nLi4uIiwgICAgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkJlZW5kZW4iLCAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJkJlYXJiZWl0ZW4iIHsKICBNRU5VSVRFTSAiJlL8Y2tn5G5naWdcdFN0cmcrWiIsICAgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBdXNzY2huZWlkZW5cdFN0cmcrWCIsICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZLb3BpZXJlblx0U3RyZytDIiwgICAgICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImRWluZvxnZW5cdFN0cmcrViIsICAgICAgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZM9nNjaGVuXHRFbnRmIiwgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJBbGxlcyAmbWFya2llcmVuXHRTdHJnK0EiLCAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJlVocnplaXQvRGF0dW1cdEY1IiwgICAgICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlplaWxlbnVtYnJ1Y2giLCAgICBDTURfV1JBUAogIE1FTlVJVEVNICImU2NocmlmdGFydGVuLi4uIiwJQ01EX0ZPTlQKIH0KUE9QVVAgIiZTdWNoZW4iIHsKICBNRU5VSVRFTSAiU3VjaGVuLi4uXHRTdHJnK0YiLCBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZXZWl0ZXJzdWNoZW5cdEYzIiwgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImSGlsZmUiIHsKICBNRU5VSVRFTSAiJkluaGFsdCIsICAgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImU3VjaGVuLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImSGlsZmUgYmVudXR6ZW4iLCAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJtxiZXIgTm90ZXBhZC4uLiIsIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJTZWl0ZSBlaW5yaWNodGVuIgp7CkxURVhUICAgICImS29wZnplaWxlOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImRnXfemVpbGU6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICJS5G5kZXIgKE1pbGxpbWV0ZXIpIiwgIDB4MTQ0LCAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZMaW5rczoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJk9iZW46IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlJlY2h0czoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZVbnRlbjoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFiYnJlY2hlbiIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkhpbGZlIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImZiIKU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiU2VpdGUgJnAiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRWRpdG9yIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmVobGVyIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWNodHVuZyIKU1RSSU5HX0lORk8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybWF0aW9uIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIih1bmJlbmFubnQpIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUgRGF0ZWllbiAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICJUZXh0ZGF0ZWllbiAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRpZSBEYXRlaSAnJXMnIGlzdCB6dSBncm/fIGb8ciBkZW4gRWRpdG9yXG4gXApCZW51dHplbiBTaWUgYml0dGUgZWluZW4gYW5kZXJlbiBFZGl0b3IsIHVtIGRpZXNlIERhdGVpIHp1IGJlYXJiZWl0ZW4uIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2llIGhhYmVuIGtlaW5lbiBUZXh0IGVpbmdlZ2ViZW4sIGRlciBcCmdlc3BlaWNoZXJ0XG4gd2VyZGVuIGv2bm50ZS4gR2ViZW4gU2llIFRleHQgZWluLCB1bmQgdmVyc3VjaGVuIFNpZSBlcyBcClxuZXJuZXV0LiIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRpZSBEYXRlaSAnJXMnXG5leGlzdGllcnQgbmljaHQuXG5cbiBcCk32Y2h0ZW4gU2llIGVpbmUgbmV1ZSBEYXRlaSBlcnN0ZWxsZW4gPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGVpICVzXG4gd3VyZGUgZ2XkbmRlcnQuXG5cbiBcCk32Y2h0ZW4gU2llIGRpZSDEbmRlcnVuZ2VuIHNwZWljaGVybiA/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGthbm4gbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJOaWNodCBnZW78Z2VuZCBBcmJlaXRzc3BlaWNoZXIsIFwKdW0gZGllc2UgRnVua3Rpb24gXG5hYnp1c2NobGll32VuLiBCZWVuZGVuIFNpZSBlaW5lIG9kZXIgbWVocmVyZSBcClxuQW53ZW5kdW5nZW4sIHVtIGRlbiB2ZXJm/GdiYXJlbiBBcmJlaXRzc3BlaWNoZXIgenUgXG5lcmj2aGVuLiIKCgp9Cg==