LyoKICogIE5vdGVwYWQgKEdlcm1hbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICogIAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ORVVUUkFMCnsKIFBPUFVQICImRGF0ZWkiIHsKICBNRU5VSVRFTSAiJk5ldS4uLiIsIDB4MTAwCiAgTUVOVUlURU0gItYmZmZuZW4uLi4iLCAweDEwMQogIE1FTlVJVEVNICImU3BlaWNoZXJuIiwgMHgxMDIKICBNRU5VSVRFTSAiU3BlaWNoZXJuICZ1bnRlci4uLiIsIDB4MTAzCiAgTUVOVUlURU0gIiZEcnVja2VuIiwgMHgxMDQKICBNRU5VSVRFTSAiU2VpdGUgZWluJnJpY2h0ZW4uLi4iLCAweDEwNQogIE1FTlVJVEVNICJEcnVja2VyJmVpbnJpY2h0dW5nLi4uIiwgMHgxMDYKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkJlZW5kZW4iLCAweDEwOAogfQpQT1BVUCAiJkJlYXJiZWl0ZW4iIHsKICBNRU5VSVRFTSAiJlL8Y2tn5G5naWdcdFN0cmcrWiIsIDB4MTEwCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBdXNzY2huZWlkZW5cdFN0cmcrWCIsIDB4MTExCiAgTUVOVUlURU0gIiZLb3BpZXJlblx0U3RyZytDIiwgMHgxMTIKICBNRU5VSVRFTSAiJkVpbmb8Z2VuXHRTdHJnK1YiLCAweDExMwogIE1FTlVJVEVNICImTPZzY2hlblx0RW50ZiIsIDB4MTE0CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkFsbGVzICZtYXJraWVyZW4iLCAweDExNgogIE1FTlVJVEVNICImVWhyemVpdC9EYXR1bVx0RjUiLCAweDExNwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImWmVpbGVudW1icnVjaCIsIDB4MTE5CiB9ClBPUFVQICImU3VjaGVuIiB7CiAgTUVOVUlURU0gIlN1Y2hlbi4uLiIsIDB4MTIwCiAgTUVOVUlURU0gIiZXZWl0ZXJzdWNoZW5cdEYzIiwgMHgxMjEKIH0KUE9QVVAgIiZIaWxmZSIgewogIE1FTlVJVEVNICImSW5oYWx0IiwgMHgxMzAKICBNRU5VSVRFTSAiJlN1Y2hlbi4uLiIsIDB4MTMxCiAgTUVOVUlURU0gIiZIaWxmZSBiZW51dHplbiIsIDB4MTMyCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIkluZiZvLi4uIiB7CiAgIE1FTlVJVEVNICImTGl6ZW56IiwgMHgxMzUKICAgTUVOVUlURU0gIiZLRUlORSBHQVJBTlRJRSIsIDB4MTM2CiAgIE1FTlVJVEVNICIm3GJlciBXaW5lIiwgMHgxMzcKICB9CiB9Cn0gCgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQXyBESUFMT0cgMCwgMCwgMjI1LCA5NQpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ORVVUUkFMClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJIZWx2IgpDQVBUSU9OICJTZWl0ZSBlaW5yaWNodGVuIgp7CkxURVhUICAgICImS29wZnplaWxlOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MSwgICAgICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZGdd96ZWlsZToiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiUuRuZGVyIiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImTGlua3M6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZPYmVuOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsKi8gICAgMHgxNEEsICAgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImUmVjaHRzOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCovICAweDE0RCwgICAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImVW50ZW46IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAweDE1MSwgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFiYnJlY2hlbiIsICAgICAweDE1MiwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkhpbGZlIiwgICAgICAgMHgxNTMsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ORVVUUkFMCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwJIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwJIlBhZ2UgJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsCQkiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsCSIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsCQkiMjUgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLAkiMjUgbW0iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsCQkJCQkiRWRpdG9yIgpTVFJJTkdfRVJST1IsCQkJCQkiRkVITEVSIgpTVFJJTkdfV0FSTklORywJCQkJCSJBQ0hUVU5HIgpTVFJJTkdfSU5GTywJCQkJCSJJbmZvcm1hdGlvbiIKClNUUklOR19VTlRJVExFRCwJCQkJIih1bmJlbmFubnQpIgoKU1RSSU5HX0FMTF9GSUxFUywJCQkJIkFsbGUgRGF0ZWllbiAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULAkJCSJUZXh0ZGF0ZWllbiAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLAkJCQkiJyVzJyBpc3QgenUgZ3Jvc3MgZvxyIGRlbiBFZGl0b3JcbiBcCkJlbnV0emVuIFNpZSBiaXR0ZSBlaW5lbiBhbmRlcmVuIEVkaXRvciwgdW0gZGllc2UgRGF0ZWkgenUgYmVhcmJlaXRlbi4iClNUUklOR19OT1RFWFQsCQkJCQkiU2llIGhhYmVuIGtlaW5lbiBUZXh0IGVpbmdlZ2ViZW4sIGRlciBcCmdlc3BlaWNoZXJ0XG4gd2VyZGVuIGv2bm50ZS4gR2ViZW4gU2llIFRleHQgZWluLCB1bmQgdmVyc3VjaGVuIFNpZSBlcyBcClxuZXJuZXV0LiIKU1RSSU5HX0RPRVNOT1RFWElTVCwJCQkJIkZpbGUgJyVzJ1xuZG9lcyBub3QgZXhpc3RcblxuIFwKRG8geW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGZpbGUgPyIKU1RSSU5HX05PVFNBVkVELAkJCQkiRGF0ZWkgJXNcbiB3dXJkZSBnZWFlbmRlcnQuXG5cbiBcCk1vZWNodGVuIFNpZSBkaWUgQWVuZGVydW5nZW4gc3BlaWNoZXJuID8iClNUUklOR19OT1RGT1VORCwJCQkJCSInJXMnIGthbm4gbmljaHQgZ2VmdW5kZW4gd2VyZGVuLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksCQkJIk5pY2h0IGdlbvxnZW5kIEFyYmVpdHNzcGVpY2hlciwgXAp1bSBkaWVzZSBGdW5rdGlvbiBcbmFienVzY2hsaWXfZW4uIEJlZW5kZW4gU2llIGVpbmUgb2RlciBtZWhyZXJlIFwKXG5BbndlbmR1bmdlbiwgdW0gZGVuIHZlcmb8Z2JhcmVuIEFyYmVpdHNzcGVpY2hlciB6dSBcbmVyaPZoZW4uIgoKCn0KCg==