IyBDb3B5cmlnaHQgKEMpIDE5ODgsIDE5ODksIDE5OTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIE1ha2UuCiMKIyBWTVMgZXh0ZW5zaW9ucyBmcm9tIEdOVSBNYWtlIDMuNjAgaW1wb3J0ZWQgYnkKIyAgS2xhdXMgS+RtcGYgKGtrYWVtcGZAZGlkeW11cy5ybWkuZGUpCiMKIyBHTlUgTWFrZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCiMgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBHTlUgTWFrZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggR05VIE1ha2U7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgoKQ0MgPSBjYy93YXJuCkNQID0gY29weQoKJS5vYmo6ICUuYwoJJChDQykgJChDRkxBR1MpL29iaj0kQCAkPAojCiMJTWFrZWZpbGUgZm9yIEdOVSBNYWtlCiMKCkNGTEFHUyA9ICQoZGVmaW5lcykgL2RlYnVnL25vb3B0L2luY2x1ZGU9KFtdLFsuZ2xvYl0pCiNMREZMQUdTID0gL2RlYgpMREZMQUdTID0KCmRlZmluZXMgPSAvZGVmaW5lPSgidW5saW5rPXJlbW92ZSIsIkhBVkVfQ09ORklHX0giLCJWTVMiLCJOT19BUkNISVZFUyIsImFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmRfZm9yX2ZpbGU9YWxsb2NfdmFyX2V4cGFuZF9mb3JfZmlsZSIpCgpMT0FEX0FWRyA9IC9kZWZpbmU9Ik5PX0xEQVYiCgojIElmIHlvdSBkb24ndCB3YW50IGFyY2hpdmUgc3VwcG9ydCwgY29tbWVudCB0aGVzZSBvdXQuCiNBUkNISVZFUyA9ICxhci5vYmosYXJzY2FuLm9iagojQVJDSElWRVNfU1JDID0gYXIuYyBhcnNjYW4uYwoKIyBJZiB5b3VyIHN5c3RlbSBuZWVkcyBleHRyYSBsaWJyYXJpZXMgbG9hZGVkIGluLCBkZWZpbmUgdGhlbSBoZXJlLgojIFN5c3RlbSBWIHByb2JhYmx5IG5lZWQgLWxQVyBmb3IgYWxsb2NhLgojIGlmIG9uIHZheCwgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZQojTE9BRExJQkVTID0gLGMub3B0L29wdApMT0FETElCRVMgPSxzeXMkJGxpYnJhcnk6dmF4Y3J0bC5vbGIvbGliCgojIElmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhbGxvY2EsIG9yIHRoZSBvbmUgcHJvdmlkZWQgaXMgYmFkLAojIGdldCBpdCBmcm9tIHRoZSBFbWFjcyBkaXN0cmlidXRpb24gYW5kIGRlZmluZSB0aGVzZS4KQUxMT0NBID0gLGFsbG9jYS5vYmoKQUxMT0NBU1JDID0gYWxsb2NhLmMKCiMgSWYgdGhlcmUgYXJlIHJlbW90ZSBleGVjdXRpb24gZmFjaWxpdGllcyBkZWZpbmVkLAojIGVuYWJsZSB0aGVtIHdpdGggc3dpdGNoZXMgaGVyZSAoc2VlIHJlbW90ZS0qLmMpLgpSRU1PVEUgPQoKIyBBbnkgZXh0cmEgb2JqZWN0IGZpbGVzIHlvdXIgc3lzdGVtIG5lZWRzLgpleHRyYXMgPSAsc2lnbmFtZS5vYmoscmVtb3RlLXN0dWIub2JqLHZtc2Z1bmN0aW9ucy5vYmosdm1zaWZ5Lm9iagojLGRpcmVjdG9yeS5vYmoKIyBhcyBhbiBhbHRlcm5hdGl2ZToKZ2xvYiA9ICxbLmdsb2JdZ2xvYi5vYmosWy5nbG9iXWZubWF0Y2gub2JqCmdldG9wdCA9ICxnZXRvcHQub2JqLGdldG9wdDEub2JqCiMgRGlyZWN0b3J5IHRvIGluc3RhbGwgYG1ha2UnIGluLgpiaW5kaXIgPSBbXQojIERpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBtYW4gcGFnZSBpbi4KbWFuZGlyID0gW10KIyBOdW1iZXIgdG8gcHV0IG9uIHRoZSBtYW4gcGFnZSBmaWxlbmFtZS4KbWFuZXh0ID0gMQoKb2JqcyA9IGNvbW1hbmRzLm9iaixqb2Iub2JqLGRpci5vYmosZmlsZS5vYmosbWlzYy5vYmosXAogICAgICAgbWFpbi5vYmoscmVhZC5vYmoscmVtYWtlLm9iaixydWxlLm9iaixpbXBsaWNpdC5vYmosXAogICAgICAgZGVmYXVsdC5vYmosdmFyaWFibGUub2JqLGV4cGFuZC5vYmosZnVuY3Rpb24ub2JqLFwKICAgICAgIHZwYXRoLm9iaix2ZXJzaW9uLm9iaiQoQVJDSElWRVMpJChBTExPQ0EpJChleHRyYXMpJChnZXRvcHQpJChnbG9iKQpzcmNzID0gY29tbWFuZHMuYyBqb2IuYyBkaXIuYyBmaWxlLmMgbWlzYy5jIFwKCW1haW4uYyByZWFkLmMgcmVtYWtlLmMgcnVsZS5jIGltcGxpY2l0LmMgXAoJZGVmYXVsdC5jIHZhcmlhYmxlLmMgZXhwYW5kLmMgZnVuY3Rpb24uYyBcCgl2cGF0aC5jIHZlcnNpb24uYyB2bXNmdW5jdGlvbnMuYyB2bXNpZnkuYyAkKEFSQ0hJVkVTX1NSQykgJChBTExPQ0FTUkMpIFwKCWNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIGpvYi5oIG1ha2UuaCBydWxlLmggdmFyaWFibGUuaAoKCi5QSE9OWTogYWxsIGRvYwphbGw6IGNvbmZpZy5oIG1ha2UuZXhlCgpkb2M6IG1ha2UuaW5mbyBtYWtlLmR2aQoKCm1ha2UuZXhlOiAkKG9ianMpCgkkKExEKSQoTERGTEFHUykvZXhlPSRAICReJChMT0FETElCRVMpCgouUEhPTlk6IGNsZWFuIHJlYWxjbGVhbgpjbGVhbjoKCS0kKFJNKSBtYWtlLmV4ZTssKi5vYmo7KgoKIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkZXBlbmRlbmNpZXMuCmNvbW1hbmRzLm9iajogY29tbWFuZHMuYyBtYWtlLmggZGVwLmggY29tbWFuZHMuaCBmaWxlZGVmLmggdmFyaWFibGUuaCBqb2IuaApqb2Iub2JqOiBqb2IuYyBtYWtlLmggY29tbWFuZHMuaCBqb2IuaCBmaWxlZGVmLmggdmFyaWFibGUuaApkaXIub2JqOiBkaXIuYyBtYWtlLmgKZmlsZS5vYmo6IGZpbGUuYyBtYWtlLmggY29tbWFuZHMuaCBkZXAuaCBmaWxlZGVmLmggdmFyaWFibGUuaAptaXNjLm9iajogbWlzYy5jIG1ha2UuaCBkZXAuaAptYWluLm9iajogbWFpbi5jIG1ha2UuaCBjb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oIGpvYi5oCnJlYWQub2JqOiByZWFkLmMgbWFrZS5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKcmVtYWtlLm9iajogcmVtYWtlLmMgbWFrZS5oIGNvbW1hbmRzLmggam9iLmggZGVwLmggZmlsZWRlZi5oCnJ1bGUub2JqOiBydWxlLmMgbWFrZS5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggcnVsZS5oCmltcGxpY2l0Lm9iajogaW1wbGljaXQuYyBtYWtlLmggcnVsZS5oIGRlcC5oIGZpbGVkZWYuaApkZWZhdWx0Lm9iajogZGVmYXVsdC5jIG1ha2UuaCBydWxlLmggZGVwLmggZmlsZWRlZi5oIGNvbW1hbmRzLmggdmFyaWFibGUuaAp2YXJpYWJsZS5vYmo6IHZhcmlhYmxlLmMgbWFrZS5oIGNvbW1hbmRzLmggdmFyaWFibGUuaCBkZXAuaCBmaWxlZGVmLmgKZXhwYW5kLm9iajogZXhwYW5kLmMgbWFrZS5oIGNvbW1hbmRzLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKZnVuY3Rpb24ub2JqOiBmdW5jdGlvbi5jIG1ha2UuaCB2YXJpYWJsZS5oIGRlcC5oIGNvbW1hbmRzLmggam9iLmgKdnBhdGgub2JqOiB2cGF0aC5jIG1ha2UuaCBmaWxlZGVmLmggdmFyaWFibGUuaAp2ZXJzaW9uLm9iajogdmVyc2lvbi5jCmFyc2Nhbi5vYmo6IGFyc2Nhbi5jCmFyLm9iajogYXIuYyBtYWtlLmggZmlsZWRlZi5oCnNpZ25hbWUub2JqOiBzaWduYW1lLmMKcmVtb3RlLXN0dWIub2JqOiByZW1vdGUtc3R1Yi5jClsuZ2xvYl1nbG9iLm9iajogWy5nbG9iXWdsb2IuYwpbLmdsb2JdZm5tYXRjaC5vYmo6IFsuZ2xvYl1mbm1hdGNoLmMKZ2V0b3B0Lm9iajogZ2V0b3B0LmMKZ2V0b3B0MS5vYmo6IGdldG9wdDEuYwoKY29uZmlnLmg6IGNvbmZpZy5oLXZtcwoJJChDUCkgJDwgJEAK